函數(shù)與作用域3

1.函數(shù)聲明和函數(shù)表達(dá)式有什么區(qū)別

函數(shù)聲明使用function關(guān)鍵字可以聲明一個函數(shù)
聲明不必放到調(diào)用的前面(函數(shù)聲明前置)
函數(shù)聲明必須有函數(shù)名

//函數(shù)聲明
  function sayHello(){
    console.log('hello')
  }
  //函數(shù)調(diào)用
  sayHello()

函數(shù)表達(dá)式聲明必須放到調(diào)用的前面
前后兩個函數(shù)的名字可以相同也可以不相同
function 后面的這個名字(sayHello)是可以省略的

 var sayHello = function sayHello(){
    console.log('hello');
  }
  sayHello()

第三種聲明函數(shù)方式幅慌,采用構(gòu)建函數(shù)
var sayHello=new Function("console.log('hello world');")

2.什么是變量的聲明前置?什么是函數(shù)的聲明前置

變量的聲明前置:在同一作用域下目溉,先把所有的變量放在開頭聲明
函數(shù)的聲明前置:與變量聲明前置同義巡验,只不過是在函數(shù)作用域下,在開頭先把變量聲明

3.arguments 是什么

在函數(shù)內(nèi)部,可使用arguments對象獲取到該函數(shù)的所有傳入?yún)?shù),需要注意定義了函數(shù)參數(shù)严衬,但沒有傳進(jìn)相應(yīng)的參數(shù)值,則沒有傳遞值的函數(shù)參數(shù)被自動賦予undefined值,例如
function printPersonInfo(name, age, sex){
console.log(name);
console.log(age);
console.log(sex);
console.log(arguments);
}

4.函數(shù)的"重載"怎樣實現(xiàn)

JavaScript不能像強(qiáng)類型語言那樣實現(xiàn)函數(shù)重載,在定義兩個相同函數(shù)名的函數(shù)樊销,后一個函數(shù)會將前一個覆蓋,即 同名函數(shù)會覆蓋脏款, 但可以在函數(shù)體針對不同的參數(shù)調(diào)用執(zhí)行相應(yīng)的邏輯
function printPeopleInfo(name, age, sex){
if(name){
console.log(name);
}
if(age){
console.log(age);
}
if(sex){
console.log(sex);
}
}
printPeopleInfo('Byron', 26);
printPeopleInfo('Byron', 26, 'male');

5.立即執(zhí)行函數(shù)表達(dá)式是什么围苫?有什么作用

立即執(zhí)行函數(shù)就是聲明一個匿名函數(shù),定義函數(shù)后就立即執(zhí)行的函數(shù)撤师。它的作用是隔離作用域够吩,不會產(chǎn)生任何全局變量,寫法:
(function fn1() {})();

6.求n!丈氓,用遞歸來實現(xiàn)

function f(n){
if(n>1){
return n*f(n-1);}
else if(n==1){
return 1;}
else{
return 0;}
}

7.以下代碼輸出什么周循?

function getInfo(name, age, sex){
    console.log('name:',name);
    console.log('age:', age);
    console.log('sex:', sex);
    console.log(arguments);
    arguments[0] = 'valley';
    console.log('name', name);
    }
getInfo('饑人谷', 2, '男');
getInfo('小谷', 3);
getInfo('男');
/*輸出結(jié)果
name:饑人谷
age:2
sex:男
["饑人谷", 2, "男"]
name valley */

/*name:小谷
age:3
sex:undefined
["小谷", 3 ]
name valley */

/*name:男
age:undefined
sex:undefined
["男"]
name valley */
  1. 寫一個函數(shù),返回參數(shù)的平方和万俗?
  function sumOfSquares(){
    var sum=0;
    for(i=0;i<arguments.length;i++){
    sum=sum+arguments[i]*arguments[i]
    }
 return sum;
  }
   var result = sumOfSquares(2,3,4)
   var result2 = sumOfSquares(1,3)
   console.log(result)  //29
   console.log(result2)  //10
  1. 如下代碼的輸出湾笛?為什么
console.log(a);
var a = 1;
console.log(b);

/*
輸出結(jié)果為:
undefined
Uncaught ReferenceError: b is not defined
將變量聲明前置并重寫
var a;
console.log(a);
a = 1;
console.log(b);//b沒有聲明及賦值,故報錯
 */
  1. 如下代碼的輸出闰歪?為什么
    sayName('world');
    sayAge(10);
    function sayName(name){
        console.log('hello ', name);
    }
    var sayAge = function(age){
        console.log(age);
    };
/*輸出結(jié)果
hello world
Uncaught TypeError: sayAge is not a function*/
function聲明的函數(shù)嚎研,會前置,故該函數(shù)的調(diào)用可以放在函數(shù)聲明前面库倘,
var sayAge = function(age)是一個函數(shù)表達(dá)式临扮,調(diào)用必須放在后面,故報錯*/
  1. 如下代碼輸出什么? 寫出作用域鏈查找過程偽代碼
var x = 10
bar() 
function foo() {
  console.log(x)
}
function bar(){
  var x = 30
  foo()
}
/*globalContext = {
  AO: {
    x: 10
    foo: function
    bar: function
  },
  Scope: null
}
聲明 foo 時 得到下面
foo.[[scope]] = globalContext.AO
聲明 bar 時 得到下面
bar.[[scope]] = globalContext.AO
輸出結(jié)果是:10 */
  1. 如下代碼輸出什么? 寫出作用域鏈查找過程偽代碼
var x = 10;
bar() 
function bar(){
  var x = 30;
  function foo(){
    console.log(x) 
  }
  foo();
}
/*globalContext = {
  AO: {
    x: 10
    bar: function
  },
  Scope: null
}
聲明 bar 時 得到下面
bar.[[scope]] = globalContext.AO

barContext = {
  AO: {
    x: 30,
    foo: function
  },
  Scope: bar.[[scope]] //globalContext.AO
}
在 bar 的執(zhí)行上下文里聲明 foo 時 得到下面
foo.[[scope]] = barContext.AO
最后輸出結(jié)果是:30*/    
  1. 以下代碼輸出什么? 寫出作用域鏈的查找過程偽代碼
var x = 10;
bar() 
function bar(){
  var x = 30;
  (function (){
    console.log(x)
  })()
}
/*globalContext = {
  AO: {
    x: 10
    bar: function
  },
  Scope: null
}
聲明 bar 時 得到下面
bar.[[scope]] = globalContext.AO

barContext = {
  AO: {
    x: 30,
    (function (){console.log(x)}): function
  },
  Scope: bar.[[scope]] //globalContext.AO
}
在 bar 的執(zhí)行上下文里聲明 foo 時 得到下面
(function (){console.log(x)}).[[scope]] = barContext.AO
最后輸出結(jié)果是:30*/    
  1. 以下代碼輸出什么教翩? 寫出作用域鏈查找過程偽代碼
var a = 1;
function fn(){
  console.log(a)   //undefiend
  var a = 5
  console.log(a)  //5
  a++
  var a
  fn3()             //1
  fn2()             //6
  console.log(a)  //20
  function fn2(){
    console.log(a)
    a = 20
  }
}
function fn3(){
  console.log(a)
  a = 200
}
fn()
console.log(a)  //200 
/*globalContext = {
  AO: {
    a: 1
    fn: function
    fn3: function
  },
  Scope: null
}
聲明 fn 時 得到下面
fn.[[scope]] = globalContext.AO
聲明 fn3 時 得到下面
fn3.[[scope]] = globalContext.AO


fn.Context = {
  AO: {
    a: undefiend
    fn2: function
  },
  Scope: fn.[[scope]] //globalContext.AO
}
在fn 的執(zhí)行上下文里聲明 fn2時 得到下面
fn2.[[scope]] = fnContext.AO*/
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末杆勇,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子饱亿,更是在濱河造成了極大的恐慌蚜退,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件彪笼,死亡現(xiàn)場離奇詭異钻注,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)配猫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門幅恋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人泵肄,你說我怎么就攤上這事捆交∈缫恚” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵零渐,是天一觀的道長窒舟。 經(jīng)常有香客問我,道長诵盼,這世上最難降的妖魔是什么惠豺? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮风宁,結(jié)果婚禮上洁墙,老公的妹妹穿的比我還像新娘。我一直安慰自己戒财,他們只是感情好热监,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著饮寞,像睡著了一般孝扛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上幽崩,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天苦始,我揣著相機(jī)與錄音,去河邊找鬼慌申。 笑死陌选,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蹄溉。 我是一名探鬼主播咨油,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼柒爵!你這毒婦竟也來了役电?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤餐弱,失蹤者是張志新(化名)和其女友劉穎宴霸,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體膏蚓,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年畸写,在試婚紗的時候發(fā)現(xiàn)自己被綠了驮瞧。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡枯芬,死狀恐怖论笔,靈堂內(nèi)的尸體忽然破棺而出采郎,到底是詐尸還是另有隱情,我是刑警寧澤狂魔,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布蒜埋,位于F島的核電站,受9級特大地震影響最楷,放射性物質(zhì)發(fā)生泄漏整份。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一籽孙、第九天 我趴在偏房一處隱蔽的房頂上張望烈评。 院中可真熱鬧,春花似錦犯建、人聲如沸讲冠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽竿开。三九已至,卻和暖如春玻熙,著一層夾襖步出監(jiān)牢的瞬間否彩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工揭芍, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留胳搞,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓称杨,卻偏偏與公主長得像肌毅,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子姑原,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353

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

  • 1. 函數(shù)聲明和函數(shù)表達(dá)式有什么區(qū)別 使用function關(guān)鍵字聲明一個函數(shù)時悬而,聲明不必放到調(diào)用的前面。//函數(shù)聲...
    _李祺閱讀 272評論 0 0
  • 函數(shù)聲明和函數(shù)表達(dá)式有什么區(qū)別锭汛? 函數(shù)聲明和函數(shù)表達(dá)式是EMACScript規(guī)定的兩種不同的聲明函數(shù)的方法笨奠。1.函...
    LeeoZz閱讀 346評論 0 1
  • 1.函數(shù)聲明和函數(shù)表達(dá)式有什么區(qū)別 (*) 區(qū)別: 函數(shù)聲明后面的分號可加可不加,不加也不影響接下來語句的執(zhí)行唤殴,但...
    Sheldon_Yee閱讀 399評論 0 1
  • 任務(wù) 函數(shù)聲明和函數(shù)表達(dá)式有什么區(qū)別答:函數(shù)聲明:function functionName(){}??函數(shù)表達(dá)式...
    mhy_web閱讀 416評論 0 0
  • 聲明前置和作用域也是JS 部分面試嘲闫牛考點 1.函數(shù)聲明和函數(shù)表達(dá)式有什么區(qū)別 函數(shù)聲明:使用function關(guān)鍵字...
    湖衣閱讀 198評論 0 0