Skip to content
New issue

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

JavaScript之词法作用域 #2

Open
joinmouse opened this issue Dec 3, 2018 · 0 comments
Open

JavaScript之词法作用域 #2

joinmouse opened this issue Dec 3, 2018 · 0 comments

Comments

@joinmouse
Copy link
Owner

作用域

在JS中作用域是一个相当重要的概念,我们一般把作用域分为两类:即静态作用域和动态作用域,JS采用的就是静态作用域(词法作用域)

对于静态作用域有一个相当重要的点是: 函数的作用域在函数定义的时候就决定了, 这个相当重要哦,接下来我们直接看一个例子:

var value = 100;

function foo() {
    console.log(value);
}

function bar() {
    var value = 1;
    foo();
}

bar();

我们先看下在控制台的执行结果 =>
default

接下来相必有些人这里有些疑问了,为什么这里的console.log的结果是100而不是1哈,其实是这样的
当我们调用bar()的时候会在函数内部调用foo()函数,但是还记得我们上面说了函数的作用域在函数定义的时候就决定了
也就是说当我们在定义foo这个函数的时候,根据作用域链的查找: foo内部没有申明value变量,我们就到全局查找到value的值是100(这个是在函数定义的时候已经被决定了),当我们调用foo()的时候,打印的结果自然就是100。

假设JS这门语言在设计的时候采用的是动态作用域(函数的作用域是在函数调用的时候才决定的),那么这里的执行结果就是1了。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant