我有以下疑問詞法範圍概念的確切含義JavaScript。究竟是什麼意思JavaScript中的詞法範圍概念?
所以,從我的理解是可以通過解釋說:
void fun()
{
int x = 5;
void fun2()
{
printf("%d", x);
}
}
顯示任何內部級可以訪問它的外表水平的變量。
那麼它是詞法範圍的概念?如果是,爲什麼它被命名爲lxical?究竟意味着什麼?
我有以下疑問詞法範圍概念的確切含義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://stackoverflow.com/questions/1047454 /什麼是詞彙範圍 –
「詞法範圍」基本上是指「範圍如書面,字面意思」。這與可能取決於*源代碼佈局以外因素的範圍規則相反* – deceze