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

首頁 > 編程 > JavaScript > 正文

Javascript學習筆記二 之 變量

2019-11-21 00:02:27
字體:
來源:轉載
供稿:網友
一.關于Javascript變量聲明
在Javascript中,聲明一個變量
var a=1;
也可以直接
a=1;
這兩種表達是有區別的,
一個是當前作用域的局部變量,另一個則是當前作用域的全局變量;
 Javascript語言的特殊之處,就在于函數內部可以直接讀取全局變量?!?
復制代碼 代碼如下:

var n=999;
function f1(){
alert(n);
}
f1(); // 999

另一方面,在函數外部自然無法讀取函數內的局部變量。
復制代碼 代碼如下:

function f1(){
  var n=999;
}
alert(n); // error

二.Javascript變量作用域鏈
復制代碼 代碼如下:

var x='000 ';
document.writeln(x); //得出'000 '
a();
function a(){
var x='aaa ';
function b(){
document.writeln(x); //undefined
var x='bbb ';
document.writeln(x); //bbb
}
b();
document.writeln(x); //aaa
}
//結果是:000 undefined bbb aaa

原理:
 當變量使用時,先從函數塊(權威指南中用調用對象來解釋)中找,
 如果找不到,從上一級函數塊找,直到找到,
 如果直到頂層代碼(指var x='000 ';的位置)還沒找到定義,代碼會報未定義錯誤。
1.按順序執行的順序,輸出x '000 '(這個沒問題);
2.然后執行a()
3.在a()中執行b()
4.b()中需要輸出x,該函數體內(作用域)有x定義,但是還未賦值,因此輸出undefined;(重點?。?
5.然后再輸出x,x已賦值,因此輸出bbb;
6.最后輸出aaa;
了解了以上原理,我們來看下面的例子
復制代碼 代碼如下:

var x = "global";
function f() {
var x='f1';
function f2(){
x='f2' ;//這里我有些混淆,GLOBAL的X應該重新被賦值為'f2'
alert(x); //返回"f2"
alert(window.x); //返回"global"
}
f2();
alert(x) //返回"f2"
}
f();
alert(x); //返回"global",沒有被重新賦值為:f2
//結果分別彈出:f2 global f2 global

解釋:
 首先執行f()中的f2(),
f2()為內部函數產生一個作用域,因此x=‘f2'修改的是f()中的x值,而非全局x.
alert(x);為‘f2',alert(window.x)為‘global'.
然后執行alert(x);這個x的作用域為全局,為‘global'
三.給新手的建議
1.減少全局變量(解決方案:把變量封裝到對象中)
引用:
“把你踩在全局的那些亂七八糟的腳印都歸于一人名下,能顯著降低與其他應用、小工具或JS庫沖突的可能性?!?
主站蜘蛛池模板: 永吉县| 屯留县| 迭部县| 恩施市| 吉首市| 东宁县| 安平县| 东山县| 汶川县| 曲松县| 清原| 屏东县| 高碑店市| 蓬莱市| 江西省| 金坛市| 珲春市| 庆云县| 达拉特旗| 萝北县| 江孜县| 阳高县| 濮阳市| 赤水市| 二连浩特市| 慈利县| 赤壁市| 蓬安县| 泸水县| 鹤庆县| 大关县| 马尔康县| 山西省| 平舆县| 大丰市| 乌恰县| 大石桥市| 桐乡市| 惠安县| 历史| 梅河口市|