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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

JS中作用域

發布時間:2023/11/27 生活经验 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JS中作用域 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

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

?


上面代碼可能和你預想的不一樣,沒有輸出 global, 而是undefined,這是為什么呢?
這是 JavaScript 的一個特性,按照作用域搜索順序,在 console.log 函數訪問 scope 變
量時, JavaScript 會先搜索函數 f 的作用域,恰巧在 f 作用域里面搜索到 scope 變量,
所以上層作用域中定義的 scope 就被屏蔽了,但執行到 console.log 語句時, 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();

?


上面是一個函數作用域嵌套的例子,我們在最內層函數引用了 scope 變量,通過作用
域搜索,找到了其父作用域中定義的 scope 變量。
有一點需要注意:函數作用域的嵌套關系是定義時決定的,而不是調用時決定的,也就
是說, JavaScript 的作用域是靜態作用域,又叫詞法作用域,這是因為作用域的嵌套關系可
以在語法分析時確定,而不必等到運行時確定。下面的例子說明了這一切:

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

?


這個例子中,通過 f2 調用的 f1 在查找 scope 定義時,找到的是父作用域中定義
的 scope 變量,而不是 f2 中定義的 scope 變量。這說明了作用域的嵌套關系不是在調用
時確定的,而是在定義時確定的

轉載于:https://www.cnblogs.com/Hizy/p/6689683.html

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。