js高級

var 是定義,沒有的話僅僅是賦值,不要狹隘的認爲就是全局
以window.xxx引用全局變量,尋找不到,作爲某個屬性不存在,返回undefined
直接返回xxx 則報錯,d is not defined
js代碼自上而下執行,但是在整體運行前分爲詞法分析(預解析)和運行期
詞法分析,分析3樣東西:參數;變量聲明;函數聲明;一個函數能使用的局部變量
,就從上面的3步分析而來
      具體步驟:
0.函數運行前的一瞬間,生成Active Object(活動對象),下稱AO
1.函數聲明的參數,形成AO 的屬性,值全爲undefined,立即接受實進行 參覆蓋
2.分析變量聲明!如 var age,
  如果AO 上還沒有age屬性,則添加AO屬性,值是undefined,
  如果已有,則不受影響
3,分析函數聲明,如function foo(){},則把函數賦給AO.foo屬性。注:如果此前foo
屬性已存在,則被無情的覆蓋了
   接着開始執行。。。。
函數聲明 與函數表達式 function t1(){}  t2=function(){}
js 被稱爲披着c外衣的lisp 語言,lisp語言是一種強大的函數式語言(面向對象,
面向過程,面向函數,面向集合)這兩種方式,效果是不同的:
  t1是函數聲明,雖然全局內也得到一個t1變量,值是function,是個表達式,有返
回結果
  而t2只是一個賦值過程,值是右側表達式返回的結果
 因此這兩種方式在詞法分析時有着本質的區別:前者在詞法分析過程就發揮作用,
後者在運行階段才發揮作用
(function(window,undefined){})內層表達式,返回值是函數,包在小括號內,當
做表達式來執行;後面再跟小括號代表立即執行
傳window是爲了加快內部查找局部變量的速度,window直接在jquery內部的AO上
不傳undefined是爲了安全,因爲在IE,fixfox低版本中,undefined可以重新賦值,
如undefined = 3,聲明undefined局部變量(名字是undefined而已),同時又不傳參
,值自然就是undefined,防止了外界對該變量的污染
作用域鏈就是指函數由內向外執行的AO鏈

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章