ES6 函数执行 中的变量
在函数与全局中对 var
声明的不同处理
简单来说,函数体内的 var
如果用于声明一个已经存在于函数作用域的变量,那么这次声明无效,会被忽略,可参考这里和 详细解释 。
函数中
function f(x) { var x=2 console.log(x) } f(5) //2
等价于
function f(x) {
x=2
console.log(x)
}
f(5) //2
全局
let x=5 var x=2 // Identifier 'x' has already been declared
参数与函数体使用同一个块作用域
function fn(x){ let x } // SyntaxError: Identifier 'x' has already been declared
JavaScript 的函数是“非惰性求值”的
// 一般函数声明 function f(x) { console.log(x); } // 表达式`a=100`是“非惰性求值”的 f(a = 100);
在这个示例中,传入函数 f() 的将是赋值表达式 a = 100 完成计算求值之后的结果。考虑到这个“结果”总是存在“值和引用”两种表达形式,所以 JavaScript 在这里约定“传值”。于是,上述示例代码最终执行到的将是 f(100)。
回顾这个过程,请你注意一个问题:a = 100 这行表达式执行在哪个上下文环境中呢?
答案是:在函数外(上例中是全局环境)。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

上一篇: ES6 export 导出 学习笔记
下一篇: 彻底找到 Tomcat 启动速度慢的元凶
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论