国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

js函數(shù)的一些難點(diǎn)

韓冰 / 1928人閱讀

摘要:今天又把函數(shù)部分復(fù)習(xí)了一下,把一些難點(diǎn)歸納下,為了讓書越看越薄,還是決定記下來。不過,匿名函數(shù)的執(zhí)行環(huán)境具有全局性,因此其對象通常指向當(dāng)然,在通過或改變函數(shù)執(zhí)行環(huán)境的情況下,就會(huì)指向其他對象。匿名函數(shù)可以用來模仿塊級作用域并避免這個(gè)問題。

今天又把javascript函數(shù)部分復(fù)習(xí)了一下,把一些難點(diǎn)歸納下,為了讓書越看越薄,還是決定記下來。

1. 創(chuàng)建函數(shù)的2種方式:函數(shù)聲明和函數(shù)表達(dá)式:

二者的區(qū)別:函數(shù)聲明提升。函數(shù)聲明后面不能跟圓括號,但函數(shù)表達(dá)式后面可以跟圓括號。要將函數(shù)聲明轉(zhuǎn)化為函數(shù)表達(dá)式,只需在給函數(shù)聲明加一對圓括號即可。(function(){})();
函數(shù)聲明:重要特征:函數(shù)聲明提升,在執(zhí)行代碼前先讀取函數(shù)聲明,所以可以把函數(shù)聲明放在調(diào)用它的語句后面。

sayHi();
function sayHi(){
     alert("hi");
}   //不會(huì)報(bào)錯(cuò)

函數(shù)表達(dá)式在使用前必須先賦值。否則會(huì)報(bào)錯(cuò)。

sayHi();
Var sayHi=function{
     alert("hi");
}   //會(huì)報(bào)錯(cuò)

2.遞歸:arguments.callee是一個(gè)指向正在執(zhí)行的函數(shù)的指針。

function factorial(num){
     if(num<=1){
          return 1;
     }else{
          return num * arguments.callee(num-1);
     }
}

但是在嚴(yán)格模式下,不能通過腳本訪問arguments.callee。可通過下面的方法。

var factorial=(function f(num){
     if(num<=1){
          return 1;
     }else{
          return num * f(num-1);
     }
});

3.this對象:

this對象是在運(yùn)行時(shí)基于函數(shù)的執(zhí)行環(huán)境綁定的:在全局函數(shù)中this等于window,而在函數(shù)被當(dāng)作某個(gè)對象的方法調(diào)用時(shí),this等于那個(gè)對象。不過,匿名函數(shù)的執(zhí)行環(huán)境具有全局性,因此其this對象通常指向window(當(dāng)然,在通過call()或apply()改變函數(shù)執(zhí)行環(huán)境的情況下,this就會(huì)指向其他對象)。

var name="the window";
var obj={
     name:"My object",
     getNameFun:function(){
          return function(){
               return this.name;
          }
     }
}
alert(obj.getNameFun()());  //the window

4.多次聲明同一個(gè)變量:

function outputNumber(){
     for(var i=0;i<10;i++){
          console.log(i);  //1 2 3 4 5 6 7 8 9
     }
     var i;
     console.log(i);  //10
}

javascript從來不會(huì)告訴你是否多次聲明了同一個(gè)變量:遇到上述情況,它只會(huì)對后續(xù)聲明視而不見(不過,它會(huì)執(zhí)行后續(xù)聲明中的變量初始化)。匿名函數(shù)可以用來模仿塊級作用域并避免這個(gè)問題。

5.閉包與變量:
由于作用域鏈的機(jī)制,閉包只能取得包含函數(shù)中任何變量的最后一個(gè)值。是因?yàn)殚]包所保存的是整個(gè)變量對象,而不是某個(gè)特殊的變量。

function createFunction(){
     var result=new Array();
     for(var i=0;i<10;i++){
          result[i]=function(){
               return i;
          }
     }
     alert(result[2]()); //10
     return result;
}

result是一個(gè)函數(shù)數(shù)組,此時(shí)每個(gè)函數(shù)都引用著保存變量i的同一個(gè)變量對象,所以在每個(gè)函數(shù)內(nèi)部i的值都是10. 但是可以通過讓函數(shù)立即執(zhí)行,來符合我們的預(yù)期。

function createFunction(){
     var result=new Array();
     for(var i=0;i<10;i++){
          result[i]=function(num){
               return num;
          }(i)
     }
     alert(result);//0,1,2,3,4,5,6,7,8,9
     return result;
}

由于函數(shù)參數(shù)是按值傳遞的,所以會(huì)將變量i的當(dāng)前值復(fù)制給參數(shù)num,這樣,result數(shù)組中的每個(gè)函數(shù)都有自己num變量的一個(gè)副本,因此就可以返回各自不同的數(shù)值了。

6.返回一個(gè)函數(shù):

function createCompareFunction(pro){
     return function(obj1,obj2){
          var va1=obj1[pro];
          var va2=obj2[pro];
          if(va1va2){
               return 1;
          }else{
               return 0;
          }
     };
     }
     var compare=createCompareFunction("name");//創(chuàng)建函數(shù)
     alert(compare({name:"wsz"},{name:"hh"}));//調(diào)用函數(shù)

7.一道面試題:

     var add=function(x){
          var sum=1;
          var tmp=function(x){
               sum=sum+x;
               return tmp;
          }

          tmp.toString=function(){
               return sum;
          }
          return tmp;
     }
alert(add(1)(2)(3));

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/86363.html

相關(guān)文章

  • 你需要知道面試中10個(gè)JavaScript概念

    摘要:自我學(xué)習(xí)目前有成千上萬的年輕人在學(xué)習(xí)和開發(fā),希望獲得一份工作。知道的綁定規(guī)則。知道和原型屬性是什么以及它們的作用。高階函數(shù)了解函數(shù)是中的一級對象,這意味著什么知道從另一個(gè)函數(shù)返回函數(shù)是完全合法的。了解閉包和高階函數(shù)允許我們使用的情況。 翻譯原文出處:10 JavaScript concepts you need to know for interviews 之前不是鬧得沸沸揚(yáng)揚(yáng)的大漠窮...

    YacaToy 評論0 收藏0
  • JavasScript重難點(diǎn)知識(shí)

    摘要:忍者級別的函數(shù)操作對于什么是匿名函數(shù),這里就不做過多介紹了。我們需要知道的是,對于而言,匿名函數(shù)是一個(gè)很重要且具有邏輯性的特性。通常,匿名函數(shù)的使用情況是創(chuàng)建一個(gè)供以后使用的函數(shù)。 JS 中的遞歸 遞歸, 遞歸基礎(chǔ), 斐波那契數(shù)列, 使用遞歸方式深拷貝, 自定義事件添加 這一次,徹底弄懂 JavaScript 執(zhí)行機(jī)制 本文的目的就是要保證你徹底弄懂javascript的執(zhí)行機(jī)制,如果...

    forsigner 評論0 收藏0
  • JS難點(diǎn)之hoist

    摘要:但是變量只有其聲明被提前在作用域的最開始處,賦值結(jié)果仍然還在原來位置。 這篇博文是之前在CSDN寫的,現(xiàn)在移至sf。 有過C或者Java類編程經(jīng)驗(yàn)的同學(xué),對于先聲明后使用的規(guī)則很熟悉,如果使用未聲明的變量或者函數(shù),編譯時(shí)程序會(huì)報(bào)錯(cuò)!但是,JavaScript卻是一個(gè)‘大奇葩’,可以在變量或者函數(shù)聲明之前使用,現(xiàn)在根據(jù)我的理解在做一下說明。 首先說明JS的hoist分為變量hoist和函...

    biaoxiaoduan 評論0 收藏0
  • JS筆記

    摘要:從最開始的到封裝后的都在試圖解決異步編程過程中的問題。為了讓編程更美好,我們就需要引入來降低異步編程的復(fù)雜性。異步編程入門的全稱是前端經(jīng)典面試題從輸入到頁面加載發(fā)生了什么這是一篇開發(fā)的科普類文章,涉及到優(yōu)化等多個(gè)方面。 TypeScript 入門教程 從 JavaScript 程序員的角度總結(jié)思考,循序漸進(jìn)的理解 TypeScript。 網(wǎng)絡(luò)基礎(chǔ)知識(shí)之 HTTP 協(xié)議 詳細(xì)介紹 HTT...

    rottengeek 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<