js函數(shù)和作用域鏈

一、函數(shù)聲明和函數(shù)表達式

函數(shù)聲明的形式:function fn() { } ,使用函數(shù)聲明的形式聲明一個函數(shù)時鸳粉,會先進行函數(shù)聲明前置,所以function聲明可以放在全局作用域中的任何一個位置园担,調(diào)用函數(shù)也不一定硬性要求一定要放在聲明函數(shù)之后届谈。函數(shù)表達式的形式: var fn= function() { } ,使用函數(shù)表達式聲明一個函數(shù)的時候弯汰,聲明前置和var無差艰山,就是先前置var fn ,所以后面要調(diào)用函數(shù)的時候,一定要在函數(shù)聲明后才能調(diào)用該函數(shù)咏闪。

二曙搬、變量的聲明前置和函數(shù)聲明前置

變量的聲明前置就是在解釋代碼時,先把 全局作用域的變量先提升到頭部 例如var a;

函數(shù)聲明前置就是在解釋代碼時鸽嫂,先把函數(shù)的聲明前置如 function fn ( );

函數(shù)內(nèi)部聲明前置是在執(zhí)行函數(shù)體時纵装,先前置函數(shù)內(nèi)部的所有聲明的變量;

三据某、argument?

argument 是一個類數(shù)組對象橡娄,但并不是一個數(shù)組對象;在函數(shù)體內(nèi)可以通過argument對象來訪問傳遞給該函數(shù)的所有參數(shù) 如argument[0]訪問第一個參數(shù)癣籽;argument[1] 訪問第二個參數(shù)挽唉,以此類推。

四筷狼、js函數(shù)沒有重載

在其他語言中瓶籽,例如C語言、JAVA語言等都有函數(shù)重載的功能埂材,就是定義兩個名字一樣的函數(shù)塑顺,但是函數(shù)的參數(shù)類型不一致,當再需要調(diào)用此函數(shù)時楞遏,會根據(jù)傳入到調(diào)用函數(shù)參數(shù)類型不同茬暇,自動地調(diào)用相關(guān)函數(shù)首昔。js沒有函數(shù)重載

五寡喝、立即執(zhí)行函數(shù)表達式

(function ( ) { })( ); 隔離作用域

六糙俗、用遞歸實現(xiàn) n! 的運算

遞歸就是在函數(shù)內(nèi)部自己調(diào)用自己

function ?factor(n) {

if(n ==1) {

return1;

}else{

returnn*factor ( n-1);

?}

}

八、寫一個函數(shù)輸出參數(shù)的平方和:

function ?sumOfSquare() {

var ? result=0;

for(vari=0;i < arguments.length;i++) {

result +=arguments[i]*arguments[i];

}

return result;

}

九预鬓、

console.log(a); ? ? // undefined

var ? ? a =1; ? console.log (b); ? ? //報錯

十巧骚、

sayName('world');

sayAge(10);

functionsayName(name){

console.log('hello ', name); ? ? ?//? hello? world

}

var ? ? sayAge =function(age){

console.log(age); ? ? ? ? //報錯,因為用函數(shù)表達式聲明函數(shù)格二,調(diào)用要在函數(shù)聲明后才能生效

};

十一劈彪、

var ? x =10;

bar() ??

function ? foo(){

console.log(x) ? ? ? ?//? ? 10

}

functionbar() {

var ?x =30

foo()

}

作用域鏈

globalContext ={

AO { x:110,

foo:function() { },

bar:function( ) { }

}

scope:null

}

foo.[[scope]]=globalContext.AO

bar.[[scope]]=globalContext.AO

barContext ={

AO { x:30}

bar.[[scope]]=globalContext.AO

}

fooContext ={

AO {}

foo.[[scope]]=globalContext.AO

}

十二、

var ?x =10;

bar()

functionbar() {

var ?x =30;

functionfoo() {

? ?console.log(x); ? ?//30

}??

foo();

}

作用域鏈:

globalContext ={

AO {x: 10,

bar: function() { },

}

}

bar.[[scope]]=globalContext.AO

barContext ={

AO { x:30,}

foo: function() { },

}

bar.[[scope]]=globalContext.AO

}

foo.[[scope]]=barContext.AO

fooContext ={

AO { }顶猜,

foo.[[scope]]=barContext.AO

}

十三沧奴、

varx =10;bar()functionbar(){varx =30;? (function(){console.log(x)//30})()}

作用域鏈:

globalContext = {

AO {x:10,

bar:function() { }

}

}

bar.[[scope]]=globalContext.AO

barContext = {

AO { x: 30}

bar.[[scope]]=globalContext.AO

}

十四、

var ? a =1;

functionfn() ?{

console.log(a) ? ? ? ? ? //undefined

var ? ?a =5;

console.log? (a); ? ? ?//5

a++;

var ?a;

??fn3()?

?fn2()

console.log(a); ? ? ?//6

function ? fn2() {

console.log(a) ? ? // 6a =20

}

}

function ? fn3() {

console.log(a) ? ?//1

a =200

}

fn()

console.log(a) ? ? ? ? ? ? //20

`

作用域鏈:

globalContext ={

AO { a:20,

fn:function() { }长窄,

fn3:function( ) { }

}

}

fn.[[scope]]=globalContext.AO

fn3.[[scope]]=globaContext .AO

fnConntext = {

AO {a:6,

fn2:function( ) { },

}

fn.[[scope]]=globalContext.AO

}

fn2.[[scope]]=fnContext.AO

fn3Context ={

AO { },

fn3.[[scope]] = globalContext.AO

}

fn2Context = {

AO { }

fn2.[[scope]]=fnContext.AO

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末滔吠,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子挠日,更是在濱河造成了極大的恐慌疮绷,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嚣潜,死亡現(xiàn)場離奇詭異冬骚,居然都是意外死亡,警方通過查閱死者的電腦和手機懂算,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門只冻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人计技,你說我怎么就攤上這事喜德。” “怎么了酸役?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵住诸,是天一觀的道長。 經(jīng)常有香客問我涣澡,道長贱呐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任入桂,我火速辦了婚禮奄薇,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘抗愁。我一直安慰自己馁蒂,他們只是感情好呵晚,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著沫屡,像睡著了一般饵隙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上沮脖,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天金矛,我揣著相機與錄音,去河邊找鬼勺届。 笑死驶俊,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的免姿。 我是一名探鬼主播饼酿,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼胚膊!你這毒婦竟也來了故俐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤澜掩,失蹤者是張志新(化名)和其女友劉穎购披,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肩榕,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡刚陡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了株汉。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片筐乳。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖乔妈,靈堂內(nèi)的尸體忽然破棺而出蝙云,到底是詐尸還是另有隱情,我是刑警寧澤路召,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布勃刨,位于F島的核電站,受9級特大地震影響股淡,放射性物質(zhì)發(fā)生泄漏身隐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一唯灵、第九天 我趴在偏房一處隱蔽的房頂上張望贾铝。 院中可真熱鬧,春花似錦、人聲如沸垢揩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽叁巨。三九已至斑匪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間俘种,已是汗流浹背秤标。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工绝淡, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留宙刘,地道東北人。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓牢酵,卻偏偏與公主長得像悬包,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子馍乙,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1. 函數(shù)聲明和函數(shù)表達式有什么區(qū)別 使用function關(guān)鍵字聲明一個函數(shù)時布近,聲明不必放到調(diào)用的前面。//函數(shù)聲...
    _李祺閱讀 273評論 0 0
  • JavaScript中的函數(shù)運行在它們被定義的作用域里丝格,而不是它們被執(zhí)行的作用域里撑瞧。 函數(shù)聲明和函數(shù)表達式有什么區(qū)...
    畢子歌閱讀 393評論 0 0
  • 1,函數(shù)聲明和函數(shù)表達式有什么區(qū)別 1显蝌、背景介紹 定義函數(shù)的方法主要有三種: 1:函數(shù)聲明(Function De...
    進擊的前端_風(fēng)笑影閱讀 438評論 0 0
  • 任務(wù) 函數(shù)聲明和函數(shù)表達式有什么區(qū)別答:函數(shù)聲明:function functionName(){}??函數(shù)表達式...
    mhy_web閱讀 416評論 0 0
  • 1.函數(shù)聲明和函數(shù)表達式有什么區(qū)別预伺。 函數(shù)聲明使用function來進行聲明,函數(shù)聲明提升曼尊,所以不論執(zhí)行語句的位置...
    Rising_suns閱讀 296評論 0 0