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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Js作用域链及变量作用域

發(fā)布時間:2025/6/15 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Js作用域链及变量作用域 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

要理解變量的作用域范圍就得先理解作用域鏈?
用var關鍵字聲明一個變量時,就是為該變量所在的對象添加了一個屬性。?
作用域鏈:由于js的變量都是對象的屬性,而該對象可能又是其它對象的屬性,而所有的對象都是window對象的屬性,所以這些對象的關系可以看作是一條鏈?
鏈頭就是變量所處的對象,鏈尾就是window對象

看下面的代碼:

function t() { var a; function t2() { var b; } }

?

js中函數也是對象,所以變量a所在的對象是t,t又在window對象中,所以a的作用域鏈如下?
t--window?
那么b所以在的對象即t2,t2又包含在t中,t又在window對象,所以b的作用域鏈如下?
t2--t--window?
明白了作用域鏈下面就開始變量的作用域分析了?
???????
1 javascript 沒有var的變量都為全局變量,且為window對象的屬性

function test1() { //執(zhí)行這個句的時候它會找作用域對象,這個函數就是作用域鏈中的第一個對象,但這個對象中沒有相關的var語句 //于里就找作用域鏈的第二個對象,即全局對象,而全局對象中也沒有相關的var語句 //由于沒有相關的var語句,js隱式在函數地聲明了變量即var all; all = 30; alert(all); } test1();alert(all); alert(window.all);

?

2 函數內(函數內的函數除外)定義的變量在整個函數內部都有效

function test2() { var t = 0; //在for的條件里定義變量,這個變更的作用域鏈對象是這個函數 //因此在整個的函數里它是有效的 for (var i = 0; i < 5; i++) { t += i; } alert(i); } test2();

?

3 函數內部的變量取代全局同名變量

var t = "bb"; function test() { //執(zhí)行t的時候,它會先找作用域鏈對象,由于它定義在函數內部,所以這個函數就是它的作用域鏈的第一個對象 //而在這個對象里又有t的定義,所以t就是局部變量了,它替換了全局變量t//t只是此時有定義,但并沒有賦值,賦值在下一行,所以這里輸出了undefined alert(t); var t = "aa"; alert(t); } test();

?

4 沒塊的作用域

?

if (true) { //在塊中定義了一個變量,它的作用域鏈的第一個對象就是全局對象window var tmp = 0; } //tmp的作用域鏈的第一個對象就是全局對象window,而上面又有全局對象中相關的var語句,因此輸出0 alert(tmp);

總結

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

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