We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
在浏览器中是window
在node中是global
全局作用域中挂载着一切预设的内置对象
var a = { name: '1' } console.log(a)//已经挂载在全局变量上
function name(params) { var a = { name: '1' } b = a } name() console.log(b)//已经挂载在全局变量上
每一个函数执行时,都会产生一个函数作用域
外部不能直接访问函数作用域中的变量(可以实现私有变量)
function A() { var a = '函数内部' console.log(a)//'函数内部' } A() console.log(a)//报错
什么是块级作用域?
由{}封闭的代码块,👇拿java举个例子
if (true){ int a1=11; } System.out.print((a1));//报错
老前辈var就不会形成块级作用域(因为var会变量提升)
经典老例子
for(var i = 0; i < 5; i++) { setTimeout(function() { console.log(i); // 5 5 5 5 5 }, 200); };
es6中的let和const声明时就会绑定在最近的作用域上(包含块级)
for (let i = 0; i < 5; i++) { setTimeout(function () { console.log(i) // 0 1 2 3 4 }, 200) }
静态作用域:函数的作用域在函数定义的时候就决定了
动态作用域:函数的作用域是在函数调用的时候才决定
function foo(){ console.log(a); } function bar(){ var a = 3; foo(); } var a = 2; bar();//答案是?
如果这里输出的是2,则是静态作用域。输出3就是动态作用域
js是静态作用域,所以输出2(bash 是动态作用域)
我们可以看到函数声明时,作用域已经确定
《JavaScript高级程序设计》
谈谈 JavaScript 的作用域
《JavaScript忍者秘籍(第2版)》
JavaScript深入之词法作用域和动态作用域
The text was updated successfully, but these errors were encountered:
No branches or pull requests
作用域分类
全局作用域
在浏览器中是window
在node中是global
全局作用域中挂载着一切预设的内置对象
显式声明
隐式声明
函数作用域
每一个函数执行时,都会产生一个函数作用域
外部不能直接访问函数作用域中的变量(可以实现私有变量)
块级作用域
什么是块级作用域?
由{}封闭的代码块,👇拿java举个例子
老前辈var就不会形成块级作用域(因为var会变量提升)
经典老例子
es6中的let和const声明时就会绑定在最近的作用域上(包含块级)
词法(静态)作用域
静态作用域:函数的作用域在函数定义的时候就决定了
动态作用域:函数的作用域是在函数调用的时候才决定
如果这里输出的是2,则是静态作用域。输出3就是动态作用域
js是静态作用域,所以输出2(bash 是动态作用域)
[[scope]]属性
我们可以看到函数声明时,作用域已经确定
参考
《JavaScript高级程序设计》
谈谈 JavaScript 的作用域
《JavaScript忍者秘籍(第2版)》
JavaScript深入之词法作用域和动态作用域
The text was updated successfully, but these errors were encountered: