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

首頁 > 開發 > JS > 正文

JS作用域深度解析

2024-05-06 16:34:12
字體:
來源:轉載
供稿:網友

本文實例為大家深度剖析JS的作用域,代碼注釋詳細,供大家參考,具體內容如下

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>作用域問題</title></head><body><script> /* * 1.全局變量與局部變量 * 外層變量可以在內層調用(全局),內層變量不能在外層調用(局部) * */ var a = 1; (function () {  // 外部變量可以在內部調用  alert(a); })(); /*function test() {  // 內部變量不能在外部調用  var a = 2; } alert(a); // 報錯*/ /* * 下面舉個例子: * 函數調用只是回到函數定義的地方,調用一下函數 * 這里在bbb函數中,調用aaa函數, * 這時的aaa函數并不是被放入bbb函數中,而是在原定義的地方 * 這是的aaa中沒有變量a,所以去訪問全局變量中的a * */ /*var a = 10; function aaa() {  alert(a); } function bbb() {  var a = 20;  aaa(); } bbb(); // 10*/ /* * 2.當var不加的時候,會自動變成全局變量 * 在全局環境中,不加var和加var效果一樣,都是全局變量 * 在局域環境中,加var會被定義為局部變量,不加var會被定義為全局變量 * */ /*function test() {  var a = 10; // 外部訪問不到  b = 10;  // 相當于全局變量  // 上面相當于:var a = b = 10; } test(); alert(b); // 10 alert(a); // 報錯*/ /* * 3.變量查找按照就近原則去查找 * var定義的變量,當就近查找沒有找到就去外層查找 * */ /*var a = 10; (function() {  var a = 20;  // a在匿名函數中var定義了,所以找到為20  alert(a); // 20 })();*/ /*var a = 10; (function() {  a = 20; // 相當于全局變量,將外部的var a = 20;  // 在匿名函數中沒有找到var定義的a,然后去外層去查找  // 外部查找到了,var a = 10 = 20;  alert(a); // 20 })();*/ /*var a = 10; (function() {  // 在匿名函數中沒有找到var定義的a,然后去外層去查找  // 外部查找到了,var a = 10  alert(a); // 10  a = 20; })();*/ /*var a = 10; (function() {  // 在匿名函數中找到var定義的a,  // 這里的var a = 20,存在變量提升,  // 在執行alert(a)之前,變量提示有var a;  // 但是a沒有值,所有返回undefined  alert(a); // undefined  var a = 20;  // 在變量提升的情況下,相當于下面:  // var a;  // alert(a);  // a = 20; })(;*/ /*var a = 10; (function() {  // 執行bbb,bbb中的a=20,但是與匿名函數和全局變量a無關  bbb();  // 在匿名函數中查找var定義的a,發現沒有  // 繼續在外層中查找,發現了 var a = 10;  alert(a); // 10  function bbb() {   var a = 20;  } })();*/ /* var a = 10; (function() {  bbb();  // 在匿名函數中查找var定義的a,發現沒有  // 繼續在外層中查找,發現了 var a = 10 = 20;  alert(a); // 20  function bbb() {   // 沒有var定義,所有為全局變量,外面的全局變量 var a = 10 = 20;   a = 20;  } })();*/ /* * 當參數與局部變量重名時,優先級等同 * */ /*var a = 10; (function (a) {  // 這里的參數a是基本類型,按值傳參的  // 相當于在匿名函數內部重新定義了一個a,  // 且與外層的a不相關  a += 3; })(a); alert(a); // 10*/ /*var a = [1,2,3]; (function (a) {  // 這里的參數a是特殊類型,按引用傳參的  // 相當于在匿名函數內部重新定義了一個a,  // 但是這個a是外層a的一個別名,它們引用了同一個地址  // 所以內部a添加值,外部a可以訪問到  a.push(4); })(a); alert(a); // [1,2,3,4]*/ /*var a = [1,2,3]; (function (a) {  // 這里的參數a是特殊類型,按引用傳參的  // 相當于在匿名函數內部重新定義了一個a,  // 但是這個a是外層a的一個別名,它們引用了同一個地址  // 所以內部a添加值,外部a可以訪問到  // 但是,這里的a又重新賦值了新的數組,斷開了與外層的關系  a = [1,2,3,4]; })(a); alert(a); // [1,2,3]*/</script></body></html>

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 惠水县| 绥江县| 称多县| 凉山| 武山县| 延长县| 石景山区| 兴宁市| 潜山县| 垫江县| 新郑市| 永和县| 巴彦县| 调兵山市| 米林县| 太原市| 西宁市| 武隆县| 建平县| 镇巴县| 沁水县| 闵行区| 达州市| 阜平县| 额济纳旗| 青田县| 芜湖县| 上饶县| 泗洪县| 丰台区| 贵州省| 眉山市| 大洼县| 会东县| 封丘县| 南昌市| 温泉县| 三门县| 霍林郭勒市| 巴中市| 凤凰县|