如下代码:
if (true) {
// 在某个条件分支下创建一个函数,并且只在这个分支内使用。
function a() {
// code...
}
a();
}
// 报错:
"Move function declaration to program root. (no-inner-declarations)"
要把函数定义在整个文档的最外层才行。我在网上搜索看到的说法是:
ES6以前,函数声明只能在程序或另一个函数体的最前面,所以在代码块内部声明函数是错误的做法。另外,由于 javascript 中代码声明会被提升到代码当前作用域的最前面,所以在代码块内声明变量也是不明智的做法
是不是在ES6之前,这样声明是语法错误?另外,我会把这个函数保持在它被调用之前,这样就不会发生变量提升了。
其实我很郁闷,因为我的代码要根据不同场景执行不同的代码,有些函数只在某一个场景下使用。按照这个标准的话要把大量函数移出来,结果就是声明的这些函数有很多根本没有被调用。这样是不是会多占用资源?
1、题主第一个问题:想这样:
所以写出下面代码:
但是,题主如果在
if
语句块之外访问函数a
,是可以的,因为所以下面代码不会报错:
所以,题主想要的
在非严格模式下,并没有实现,或者说,看起来实现了,但实际上没有,反而造成了全局变量污染且容易引起歧义;
在严格模式下,是实现了的,也就是说,上面的函数
a
只能在if
语句块内访问,因为2、题主的第二个问题:
答:
3、题主的第三个问题:
题主请先去了解下函数声明语句的变量提升,题主的这句话代表题主并不理解变量提升;
4、题主的第四个问题:
这个不太清楚,我粗浅的认为不会,因为 js 有垃圾回收机制,如果没有闭包,正常情况下都会被垃圾回收掉的,闭包题主请单独查资料,或者戳这
参考:深入理解ES6-中-非扫描版