国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

再探JavaScript作用域

2019-11-20 14:06:49
字體:
來源:轉載
供稿:網友

黃金守則第一條:

js沒有塊級作用域(你可以自己閉包或其他方法實現),只有函數級作用域,函數外面的變量函數里面可以找到,函數里面的變量外面找不到。

first try:

這是為什么呢??

var a = 10;function aaa(){//step-4	alert(a);//step-5->執行alert,此時只能找到外面的a=10故彈框10}function bbb(){//step-2	var a = 20;	aaa();//step-3}//定義了函數沒啥用,調用才是真格的所以這里是step-1bbb();//step-1

其實原理大家都懂,應該就是易錯而已,萬變不離其綜。

second try:

這是為什么呢? 因為給a賦值b的時候,b還沒有定義,所以a是undefined,b是10.

黃金守則第二條:

變量的查找是就近原則,去尋找var定義的變量,當就近沒有找到的時候就去查找外層。

look:

這是為什么呢、? 這里面有兩個原因,一是預解析,二是就近查找。

var a=10;function aaa(){	alert(a);//undefined,查找a的時候會現在函數內查找,由于預解析的作用,此時的a是undefined,因此永遠不會去查找外面的10了	var a = 20;	/*預解析	var a	alert(a);	var a = 20;*/}aaa();

attention:

這個吧,就驗證了第二條,雖然是就近原則,但是是就近找var聲明的變量,這個是因為沒有var聲明的變量是全局的,這里只是修改了a的值。所以上面就是因為在函數內沒找到var的a,于是到外面去找了,一找就找到了,于是a就alert出10了;不過沒錯的是a=20后,a確實為20了,只不過alert的時候還沒有執行到那~~

看吧~

下面這個例子,更加驗證了js的函數作用域 而已:

這是因為在alert(a)的時候,bbb函數中的a確實為20 ,可是它對于這時的alert(a)這句話來說是局部的,alert(a)根本找不到bbb函數中的a,所以在aaa函數中它找不到a,于是乎去外面找,一找,就找到了10。

黃金守則第三條:

當參數跟局部變量重名時,優先級是等同的。

例:

還有:傳參時,基本類型傳值,引用類型傳引用。(但是重新賦值之后就不是這樣了喔)

var a = 5;var b = a;b +=3;alert(a);//5var a = [1,2,3];var b=a;b.push(4);alert(a);//[1,2,3,4];

上面代碼沒有問題,但是下面就不一樣啦。

因為b被重新賦值了,不指向a了。

此外,參數與變量的作用域是相似的:

對比上下這兩個:

上面是參數是基本類型,只傳了值進去,下面的傳個引用類型:(同樣也包含重新賦值的情況)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新乡县| 宁河县| 天水市| 乌拉特后旗| 射洪县| 甘德县| 山丹县| 广河县| 昂仁县| 墨脱县| 固安县| 沾化县| 天长市| 武清区| 延庆县| 稻城县| 大名县| 云龙县| 吉木萨尔县| 定日县| 平原县| 凤城市| 多伦县| 宝清县| 抚宁县| SHOW| 新津县| 南开区| 简阳市| 达州市| 龙泉市| 南江县| 乌拉特后旗| 芦溪县| 金坛市| 巩义市| 揭阳市| 龙陵县| 昆山市| 花垣县| 武夷山市|