当函数作为参数传递时,Javascript函数提升不适用
Javascript function hoisting not applicable when the function is passed as an argument?
Javascript有一个有趣的东西,叫做函数提升,这意味着我们可以在声明之前(即在视觉上)使用函数表达式(注意:我的措辞可能不正确,请随意评论)。
fn1(); // works OK
function fn1() {console.log('fn1');}
但是,如果我们传递一个命名函数作为参数,函数提升就不会发生。语法看起来很相似,但我想这不再是一个函数表达式,而是一个命名的匿名函数(!)。
fn2(); // throws a ReferenceError as fn2 is not defined
setTimeout(function fn2() {console.log('fn2')}, 0);
- 函数表达式和命名lambda之间确实有区别吗
- 两者之间还有其他显著的区别吗
- 考虑到fn2是一个命名的lambda,
fn2
名称是否可以从fn2本身以外的任何地方访问
只有函数语句/声明应该绑定相应的变量(并且要进行提升)。
setTimeout的参数列表中的函数被视为函数表达式;它有一个名称("fn2"),但没有绑定到变量fn2
,并且不是在计算表达式之前创建的。。
考虑到fn2是一个命名的lambda,是否可以从fn2本身以外的任何地方访问fn2名称?
在IE的bug版本中,是的。命名函数表达式被创建为封闭执行上下文中的变量(这与ECMA-262不一致)。请参阅已解密的命名函数表达式。
相关文章:
- 从函数JavaScript返回不可变数组/对象
- 将对象传递给函数.JavaScript
- 如何定义const函数javascript(语法糖)
- 新的日期函数javascript
- TypeError:this.getAttribute不是一个函数-javascript
- 从函数javascript发送变量
- 扩展自容器函数Javascript
- 从内部函数javascript内部分配外部函数的对象
- 使用函数JavaScript中的函数
- 在这里使用回调函数(JavaScript)有什么好处吗
- 来自函数 Javascript 的 NaN 返回值 ||函数执行顺序
- 将“e”传递给一个新函数 - javascript
- 调用函数中的一个函数——Javascript
- 传递的变量不适用于我的函数-Javascript
- 如何将类方法设置为等于多个函数?-Javascript
- 显示php中的函数javascript
- 如何使用php代码创建函数Javascript弹出框
- 未调用的外部函数-javascript
- 如何在类中运行函数.Javascript
- 关闭mouseover上的一个函数——Javascript,jQuery