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
在JS中作用域是一个相当重要的概念,我们一般把作用域分为两类:即静态作用域和动态作用域,JS采用的就是静态作用域(词法作用域)
对于静态作用域有一个相当重要的点是: 函数的作用域在函数定义的时候就决定了, 这个相当重要哦,接下来我们直接看一个例子:
var value = 100; function foo() { console.log(value); } function bar() { var value = 1; foo(); } bar();
我们先看下在控制台的执行结果 =>
接下来相必有些人这里有些疑问了,为什么这里的console.log的结果是100而不是1哈,其实是这样的 当我们调用bar()的时候会在函数内部调用foo()函数,但是还记得我们上面说了函数的作用域在函数定义的时候就决定了。 也就是说当我们在定义foo这个函数的时候,根据作用域链的查找: foo内部没有申明value变量,我们就到全局查找到value的值是100(这个是在函数定义的时候已经被决定了),当我们调用foo()的时候,打印的结果自然就是100。
假设JS这门语言在设计的时候采用的是动态作用域(函数的作用域是在函数调用的时候才决定的),那么这里的执行结果就是1了。
The text was updated successfully, but these errors were encountered:
No branches or pull requests
作用域
在JS中作用域是一个相当重要的概念,我们一般把作用域分为两类:即静态作用域和动态作用域,JS采用的就是静态作用域(词法作用域)
对于静态作用域有一个相当重要的点是: 函数的作用域在函数定义的时候就决定了, 这个相当重要哦,接下来我们直接看一个例子:
我们先看下在控制台的执行结果 =>
接下来相必有些人这里有些疑问了,为什么这里的console.log的结果是100而不是1哈,其实是这样的
当我们调用bar()的时候会在函数内部调用foo()函数,但是还记得我们上面说了函数的作用域在函数定义的时候就决定了。
也就是说当我们在定义foo这个函数的时候,根据作用域链的查找: foo内部没有申明value变量,我们就到全局查找到value的值是100(这个是在函数定义的时候已经被决定了),当我们调用foo()的时候,打印的结果自然就是100。
假设JS这门语言在设计的时候采用的是动态作用域(函数的作用域是在函数调用的时候才决定的),那么这里的执行结果就是1了。
The text was updated successfully, but these errors were encountered: