中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript函數內部屬性有哪些

發布時間:2020-12-02 14:05:47 來源:億速云 閱讀:242 作者:小新 欄目:web開發

了解JavaScript函數內部屬性有哪些?這個問題可能是我們日常學習或工作經常見到的。希望通過這個問題能讓你收獲頗深。下面是小編給大家帶來的參考內容,讓我們一起來看看吧!

函數內部有兩個特殊對象,this、arguments,其中arguments是一個類數組對象,包含著傳入函數中的所有參數,主要用來保存函數參數。arguments對象還有一個callee屬性,callee是一個指針,指向擁有這個arguments對象的函數。

callee

function fact(num){
        if(num<=1){
        return 1;
        }else{
        return num*fact(num-1);
        }
    }

這是一個實現階乘的函數,采用遞歸的方式,這種方式存在一個問題就是,當fact的名稱更改以后,如果不及時更改函數內部的函數名稱,該函數則無效。此時采用callee屬性替代當前擁有num參數對象的函數也就是fact.

采用callee實現如下

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

this

this引用的是函數執行的環境對象,當函數被當做某個對象的方法調用時,此時的this對象引用的是當前調用函數的對象。

不同的環境this指向的值不同,下面是幾種this在不同執行環境下所指向的值

方法調用

當函數作為對象方法的時候,函數里的this被綁定到當前對象上(也可以稱之為方法調用)

例如:

var myNum = {
      value:1,
      increment:function(arg){
          this.value +=arg;

      }
  };
   myNum.increment(3);
  console.log('example1:'+myNum.value);//example1:4

上述的increment是一個對象方法,該對象方法內部的this指向的就是當前對象

函數調用

當函數作為非對象方法時候,this綁定到全局對象window,如果此時要調用內部函數可以采用that = this。

// 一般的函數
function add(a){
    return a+2 ;
}

var value = 2;
myNum.count = function (){
    let value = 1;
    let help = function(){
        this.value = add(this.value);
    }
    help();
    console.log(this.value);//4
}
myNum.count();


that = this方式

var value = 2;
myNum.count = function (){
    let value = 1;
    let that = this;
    let help = function(){
        that.value = add(that.value);
    }
    help();
    console.log(that.value);//3
}
myNum.count();

構造函數

用new運算符調用構造函數,會先創建一個連接到構造函數的prototype(原型對象),再將this綁定到該對象

function Person(name){
    this.name = name;
}

Person.prototype.sayName = function(){
    return this.name;
}
var person1 = new Person('TOM');

console.log(person1.sayName());

apply\call\bind

綁定this到指定的環境對象

 
 var people = {
    name:"LILY"
}
console.log(Person.prototype.sayName.apply(people));
console.log(Person.prototype.sayName.bind(people)());
console.log(Person.prototype.sayName.call(people));

call :方法調用一個具有給定this值的函數,以及提供的參數列表。
apply: 方法調用一個具有給定this值的函數,以及提供的參數(數組或類數組對象)。
bind :方法創建一個新的函數,調用時設置this關鍵字為提供的“值”。

ES6 箭頭函數

es6箭頭函數里的this指向定義時所在的對象,不是執行的環境對象,就說明this在箭頭函數里使用時是一個不變的值

function foo(){
    setTimeout(()=>{
        console.log('name:',this.name);
    },1000)
}
var name = "kiki";
foo.call({name:"didi"});//name:didi

箭頭函數里this的值指向的是定義時所在的環境對象,es5中實現箭頭函數的方法:采用 that = this這種機制,實現this的綁定

感謝各位的閱讀!看完上述內容,你們對JavaScript函數內部屬性有哪些大概了解了嗎?希望文章內容對大家有所幫助。如果想了解更多相關文章內容,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宁波市| 尖扎县| 西青区| 江孜县| 久治县| 宜川县| 平果县| 启东市| 金平| 英山县| 云霄县| 裕民县| 廉江市| 九台市| 谢通门县| 亳州市| 贡觉县| 天镇县| 金乡县| 嘉荫县| 攀枝花市| 彭阳县| 克什克腾旗| 盈江县| 堆龙德庆县| 郯城县| 泸溪县| 涿州市| 宿迁市| 胶州市| 商河县| 桃江县| 抚顺县| 清水县| 台东县| 澳门| 阿克陶县| 革吉县| 益阳市| 阿克苏市| 枣庄市|