日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

JS中作用域

發(fā)布時(shí)間:2023/11/27 生活经验 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JS中作用域 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?

var scope = 'global'; var f = function () { console.log(scope); // 輸出 undefined var scope = 'f'; } f();

?


上面代碼可能和你預(yù)想的不一樣,沒有輸出 global, 而是undefined,這是為什么呢?
這是 JavaScript 的一個(gè)特性,按照作用域搜索順序,在 console.log 函數(shù)訪問 scope 變
量時(shí), JavaScript 會先搜索函數(shù) f 的作用域,恰巧在 f 作用域里面搜索到 scope 變量,
所以上層作用域中定義的 scope 就被屏蔽了,但執(zhí)行到 console.log 語句時(shí), scope 還
沒被定義,或者說初始化,所以得到的就是 undefined 值了

?

 1 var f = function() {
 2   var scope = 'f0';
 3   (function() {
 4     var scope = 'f1';
 5     (function() {
 6       console.log(scope); // 輸出 f1
 7     })();
 8   })();
 9 };
10 f();

?


上面是一個(gè)函數(shù)作用域嵌套的例子,我們在最內(nèi)層函數(shù)引用了 scope 變量,通過作用
域搜索,找到了其父作用域中定義的 scope 變量。
有一點(diǎn)需要注意:函數(shù)作用域的嵌套關(guān)系是定義時(shí)決定的,而不是調(diào)用時(shí)決定的,也就
是說, JavaScript 的作用域是靜態(tài)作用域,又叫詞法作用域,這是因?yàn)樽饔糜虻那短钻P(guān)系可
以在語法分析時(shí)確定,而不必等到運(yùn)行時(shí)確定。下面的例子說明了這一切:

var scope = 'top';
var f1 = function() {console.log(scope);
};
f1(); // 輸出 top
var f2 = function() {var scope = 'f2';f1();
};
f2(); // 輸出 top

?


這個(gè)例子中,通過 f2 調(diào)用的 f1 在查找 scope 定義時(shí),找到的是父作用域中定義
的 scope 變量,而不是 f2 中定義的 scope 變量。這說明了作用域的嵌套關(guān)系不是在調(diào)用
時(shí)確定的,而是在定義時(shí)確定的

轉(zhuǎn)載于:https://www.cnblogs.com/Hizy/p/6689683.html

總結(jié)

以上是生活随笔為你收集整理的JS中作用域的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。