What exactly means the lexical scope concept in JavaScript?
本问题已经有最佳答案,请猛点这里访问。
我对javascript中词汇范围概念的确切含义有以下疑问。
因此,根据我所理解的,它可以解释为:
1 2 3 4 5 6 7 8 9 | void fun() { int x = 5; void fun2() { printf("%d", x); } } |
显示任何内部级别都可以访问其外部级别变量。
那么它是词汇范围的概念吗?如果是,为什么叫Lxical?什么意思?
即使您发布的代码不是Javascript,您基本上是对的。一个
1 2 3 4 5 6 7 8 9 10 11 12 13 | var a = 10, b = 20; (function () { var b = 100; console.log(a); //10 console.log(b); //100 (function() { var c = 333; })(); console.log(c) //undefined })(); |
值得注意的是,范围(函数是在其中定义的)与函数一起保存。这意味着:
1 2 3 4 5 6 7 8 9 10 | function A (a) { var b = 100; return function (c) { console.log(a, b, c); } } var afx = A(10); afx(666); //10, 100, 666; |
但是,javascript不提供BlockScope。所以:
1 2 | for (var i = 0; i < 10; i++) { … } console.log(i) //9 |
变量不是?作用域?到街区。
但是ES6和新的关键字
1 2 | for (let i = 0; i < 10; i++) { … } console.log(i); // ReferenceError: i is not defined (using babel to transpile) |
因此,在未来的JS版本中,也可以这样进行阻塞作用域:
1 2 3 4 5 | { let i = '#'; console.log(i); //# } console.log(i); // ReferenceError: i is not defined |
词汇范围独立于执行上下文,您的示例就是这样。
动态范围将取决于执行函数的上下文:
1 2 3 4 5 6 7 8 9 10 11 12 | this.word = 'hello'; function saySomething() { console.log(this.word); } saySomething(); //"hello" var otherContext = { word :"bye" } saySomething.call(otherContext); //"bye" |