js之函數(shù)

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

函數(shù)聲明:

function functionName(){
    statement;
}

使用function關(guān)鍵字聲明一個函數(shù)
函數(shù)表達(dá)式:

var printName = function(){
    console.log('Byron');
};

聲明一個變量賦值其為函數(shù)

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

變量的聲明前置:先解析代碼眠寿,獲取所有被聲明的變量,然后再一行一行地運行。這造成的結(jié)果酱吝,就是所有的變量的聲明語句纳本,都會被提升到代碼的頭部
函數(shù)的聲明前置:和變量的聲明會前置一樣窍蓝,函數(shù)聲明同樣會前置,如果我們使用函數(shù)表達(dá)式那么規(guī)則和變量一樣饮醇,如果我們使用函數(shù)聲明的方式它抱,那么即使函數(shù)寫在最后也可以在前面語句調(diào)用。

3.arguments 是什么

arguments可以獲取到該函數(shù)的所有傳入?yún)?shù)

function printPersonInfo(name, age, sex){
    console.log(name);
    console.log(age);
    console.log(sex);
    console.log(arguments);
}

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

在JavaScript中沒有函數(shù)重載的概念朴艰,函數(shù)通過名字確定唯一性观蓄,參數(shù)不同也被認(rèn)為是相同的函數(shù),后面的覆蓋前面的

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

//方法1
( function() {
}() );
//方法2
( function() {
} )();

作用:創(chuàng)建一個獨立的作用域侮穿,外面訪問不到變量,避免污染

6毁嗦、什么是函數(shù)的作用域鏈

任何程序設(shè)計語言都有作用域的概念亲茅,簡單的說,作用域就是變量與函數(shù)的可訪問范圍狗准,即作用域控制著變量與函數(shù)的可見性和生命周期克锣。在JavaScript中,變量的作用域有全局作用域和局部作用域兩種腔长。
1.全局作用域
 在代碼中任何地方都能訪問到的對象擁有全局作用域
2.局部作用域
和全局作用域相反袭祟,局部作用域一般只在固定的代碼片段內(nèi)可訪問到,最常見的例如函數(shù)內(nèi)部捞附,所有在一些地方也會看到有人把這種作用域稱為函數(shù)作用域
作用域鏈
當(dāng)代碼在一個環(huán)境中執(zhí)行時巾乳,會創(chuàng)建變量對象的一個作用域鏈(scope chain,不簡稱sc)來保證對執(zhí)行環(huán)境有權(quán)訪問的變量和函數(shù)的有序訪問您没。作用域第一個對象始終是當(dāng)前執(zhí)行代碼所在環(huán)境的變量對象,如果當(dāng)前環(huán)境沒有胆绊,就依次訪問上一級變量氨鹏。

代碼

1.以下代碼輸出什么?

 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('hunger', 28, '男'); 
getInfo('hunger', 28);
getInfo('男');
name:hunger;
age:28;
sex:男压状;
['hunger',28,'男']
name:valley;

name:hunger;
age:28;
sex:undefined;
['hunger',28]
name:valley;

name:男;
age:undefined;
sex:undefined;
['男']
name:valley;

2.寫一個函數(shù)仆抵,返回參數(shù)的平方和?如

function sumOfSquares(){
   var sum=0;
    for(var i=0;i<arguments.length;i++){
      sum +=arguments[i]*arguments[i];
    }
console.log(sum);
 } 

sumOfSquares(2,3,4); // 29 
sumOfSquares(1,3); // 10

3.如下代碼的輸出种冬?為什么 ?

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

聲明(var)會被前置肢础,所以a是undefined,而b未被聲明碌廓,所以報錯身坐。

4..如下代碼的輸出鹅颊?為什么

sayName('world'); 
sayAge(10);
function sayName(name){
 console.log('hello ', name); 
}
 var sayAge = function(age){ 
      console.log(age);
 };
hello world;
未定義

因為聲明和定義函數(shù)會前置峭范,可轉(zhuǎn)換為

var sayAge
function sayName(name){
 console.log('hello ', name); 
}
sayName('world'); 
sayAge(10);
sayAge = function(age){ 
      console.log(age);
 };

5.如下代碼的輸出径玖?為什么

function fn(){
}
 var fn = 3;
 console.log(fn);//3

可轉(zhuǎn)化為

 var fn
function fn(){}
 fn = 3;
 console.log(fn);/

6.如下代碼的輸出?為什么

function fn(fn2){ 
  console.log(fn2); 
  var fn2 = 3;
  console.log(fn2); 
  console.log(fn);
  function fn2(){
     console.log('fnnn2');
  }
 }
 fn(10);
  function fn2(){
     console.log('fnnn2');
  }

3

function fn(fn2){ 
  console.log(fn2); 
  var fn2 = 3;
  console.log(fn2); 
  console.log(fn);
  function fn2(){
     console.log('fnnn2');
  }
 }

可轉(zhuǎn)化為

function fn(fn2){ 
  var fn2//聲明提前
  function fn2(){
     console.log('fnnn2');
  }//函數(shù)定義提前
  console.log(fn2); //打印fn2這一函數(shù)
   fn2 = 3;
  console.log(fn2); //3
  console.log(fn);//打印fn函數(shù)
 
 }
 fn(10);

7.如下代碼的輸出纪挎?為什么

var fn = 1; 
function fn(fn){ 
    console.log(fn);
 }
 console.log(fn(fn)); //報錯

等同于

var fn; 
function fn(fn){ 
    console.log(fn);
 }
fn = 1//fn變成了1
 console.log(fn(fn));//fn 不是函數(shù)期贫,報錯

8.如下代碼的輸出?為什么

 //作用域 
console.log(j);
 console.log(i);
 for(var i=0; i<10; i++){ 
    var j = 100;
 }
 console.log(i);
 console.log(j);
undefined;
undefined;//i和j都未定義
10;//for循環(huán)的聲明都是全局變量
100;

9.如下代碼的輸出异袄?為什么

 fn(); 
var i = 10;
var fn = 20;
console.log(i);
function fn(){
    console.log(i); 
    var i = 99;
    fn2();
    console.log(i);
    function fn2(){
       i = 100;
    }
}
undefined;
100;
10;

等同于

var i;
var fn;
function fn(){
    var i;//聲明前置
     function fn2(){
       i = 100;
      }//函數(shù)定義前置
    console.log(i); //i未定義
     i = 99;
    fn2();//i變成100
    console.log(i);//100
   
    }
 fn(); //執(zhí)行函數(shù)
 i = 10;//i變成10
 fn = 20;
console.log(i);10

10.如下代碼的輸出通砍?為什么

var say = 0;
(function say(n){
  console.log(n); 
  if(n<3) 
  return; 
  say(n-1); 
  }( 10 ));
   console.log(say);
10
9
8
7
6
5
4
3
2
0

代碼等同于

var say;
(function say(n){
  console.log(n); 
  if(n<3) 
  return; 
  say(n-1); 
  }( 10 ));//函數(shù)立即執(zhí)行,n初始值為10烤蜕,循環(huán)直到n等于2停止
say = 0;
 console.log(say);//0
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末封孙,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子讽营,更是在濱河造成了極大的恐慌虎忌,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件橱鹏,死亡現(xiàn)場離奇詭異膜蠢,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)莉兰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進(jìn)店門挑围,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人糖荒,你說我怎么就攤上這事杉辙。” “怎么了寂嘉?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵奏瞬,是天一觀的道長。 經(jīng)常有香客問我泉孩,道長硼端,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任寓搬,我火速辦了婚禮珍昨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘句喷。我一直安慰自己镣典,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布唾琼。 她就那樣靜靜地躺著兄春,像睡著了一般。 火紅的嫁衣襯著肌膚如雪锡溯。 梳的紋絲不亂的頭發(fā)上赶舆,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天,我揣著相機(jī)與錄音祭饭,去河邊找鬼芜茵。 笑死,一個胖子當(dāng)著我的面吹牛倡蝙,可吹牛的內(nèi)容都是我干的九串。 我是一名探鬼主播,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼寺鸥,長吁一口氣:“原來是場噩夢啊……” “哼猪钮!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起胆建,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤躬贡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后眼坏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拂玻,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年宰译,在試婚紗的時候發(fā)現(xiàn)自己被綠了檐蚜。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡沿侈,死狀恐怖闯第,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情缀拭,我是刑警寧澤咳短,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布填帽,位于F島的核電站,受9級特大地震影響咙好,放射性物質(zhì)發(fā)生泄漏篡腌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一勾效、第九天 我趴在偏房一處隱蔽的房頂上張望嘹悼。 院中可真熱鬧,春花似錦层宫、人聲如沸杨伙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽限匣。三九已至,卻和暖如春毁菱,著一層夾襖步出監(jiān)牢的瞬間膛腐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工鼎俘, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留哲身,地道東北人。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓贸伐,卻偏偏與公主長得像勘天,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子捉邢,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,728評論 2 351

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

  • 問答題 1. 函數(shù)聲明和函數(shù)表達(dá)式有什么區(qū)別 1.函數(shù)聲明必須有標(biāo)識符脯丝,也就是常說的函數(shù)名;函數(shù)表達(dá)式可以省略函數(shù)...
    Maggie_77閱讀 377評論 0 1
  • 概念 1伏伐、函數(shù)聲明和函數(shù)表達(dá)式有什么區(qū)別宠进? ECMAScript規(guī)定了三種聲明函數(shù)方式: 構(gòu)造函數(shù)首先函數(shù)也是對象...
    周花花啊閱讀 465評論 1 1
  • 繼承 一、混入式繼承 二藐翎、原型繼承 利用原型中的成員可以被和其相關(guān)的對象共享這一特性材蹬,可以實現(xiàn)繼承,這種實現(xiàn)繼承的...
    magic_pill閱讀 1,054評論 0 3
  • 少不更事初相識吝镣, 風(fēng)華正茂各東西堤器, 歲月如梭霜染鬢, 破繭成蝶惺相惜末贾。
    900e6335c6d0閱讀 168評論 0 0
  • 文/安小玲 1闸溃、沒有強(qiáng)烈的動力就無法專注 如果你缺乏完成任務(wù)的動機(jī),你就不會把時間分配給這件事,人在一段時間里專注...
    蝸牛有故事閱讀 213評論 0 0