Javascript學習筆記二 之 變數

來源:互聯網
上載者:User

一.關於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庫衝突的可能性。”
– Douglas Crockford 複製代碼 代碼如下:var name = 'Jeffrey';
var lastName = 'Way';
function doSomething() {...}
console.log(name); // Jeffrey -- or window.name

更好的寫法 複製代碼 代碼如下:var DudeNameSpace = {
name : 'Jeffrey',
lastName : 'Way',
doSomething : function() {...}
}
console.log(DudeNameSpace.name); // Jeffrey

注意看,我們是如何戲劇化地把“亂七八糟的腳印”都歸到“DudeNameSpace”這對象之下的;
2.一長列變數聲明?別寫那麼多var,用逗號吧 複製代碼 代碼如下:var someItem = 'some string';
var anotherItem = 'another string';
var oneMoreItem = 'one more string';

更好的寫法 複製代碼 代碼如下:var someItem = 'some string',
anotherItem = 'another string',
oneMoreItem = 'one more string';

不言自明。我不知道這樣做能否提升代碼執行速度,但是確實讓你的代碼乾淨許多。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.