究竟是什么意思JavaScript中的词法范围概念?
问题描述:
我有以下疑问词法范围概念的确切含义JavaScript。究竟是什么意思JavaScript中的词法范围概念?
所以,从我的理解是可以通过解释说:
void fun()
{
int x = 5;
void fun2()
{
printf("%d", x);
}
}
显示任何内部级可以访问它的外表水平的变量。
那么它是词法范围的概念?如果是,为什么它被命名为lxical?究竟意味着什么?
答
词法作用域独立于执行上下文,您的示例就是这种情况。执行功能,其中
的动态范围将取决于具体情况:
this.word = 'hello';
function saySomething() {
console.log(this.word);
}
saySomething(); // "hello"
var otherContext = {
word : "bye"
}
saySomething.call(otherContext); // "bye"
答
即使你已经发布的代码是不是JavaScript中,你基本上是正确的。甲function() { … }
创建一个范围和»内一个内部范围«可以从»外«
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
})();
访问的变量值得注意地说的范围内,一个功能中定义,保存与该功能。这意味着:
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。所以:
for (var i = 0; i < 10; i++) { … }
console.log(i) //9
该变量不在范围内。
但是 ES6和新的关键字let
,定义变量,改变这一点。所以:
for (let i = 0; i < 10; i++) { … }
console.log(i); // ReferenceError: i is not defined (using babel to transpile)
所以JS的未来版本,也Blockscoping可能是这样的:
{
let i = '#';
console.log(i); //#
}
console.log(i); // ReferenceError: i is not defined
词汇范围也被称为静态范围(相对于动态范围)。在动态范围内,函数可以根据其运行时上下文访问变量,在静态范围内,它只能从源代码中定义的上下文访问变量 – devnull69
检查此问题: http://*.com/questions/1047454 /什么是词汇范围 –
“词法范围”基本上是指“范围如书面,字面意思”。这与可能取决于*源代码布局以外因素的范围规则相反* – deceze