真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

作用域和閉包(以及this的用法)

執(zhí)行上下文

??在介紹作用域特性之前,我們先來回顧一下js的執(zhí)行上下文(詳細(xì)介紹:https://www.jianshu.com/p/8f19e45fd1f1)
?一段

this

核心:this要在執(zhí)行時才能確認(rèn)值,定義時無法確認(rèn)。

var a = {
    name: 'A',
    fn: function (){
        console.log(this.name);
    }
}
a.fn(); // this === a (即使是b.a.fn(),this也是a)
a.fn.call({name: 'B'});  // this === {name: 'B'}
var fn1 = a.fn;
fn1();  // this === window

this幾種不同的運(yùn)用場景
1、作為構(gòu)造函數(shù)執(zhí)行:(例如:new Foo(),this指向這個新對象)
2、作為對象屬性執(zhí)行:(this指向?qū)ο螅?br/>3、作為普通函數(shù)執(zhí)行:(this指向window)
4、call()、apply()、bind():(this指向傳入的第一個對象參數(shù),bind只有一個參數(shù))
參考:https://www.w3cschool.cn/jsnote/jsnote-this.html

call,apply、bind都屬于Function.prototype的一個方法,他們的作用改變函數(shù)的調(diào)用對象,它是JavaScript引擎內(nèi)在實現(xiàn)的,因為屬于Function.prototype,所以每個Function對象實例(就是每個方法)都有call,apply,bind屬性。既然作為方法的屬性,那它們的使用就當(dāng)然是針對方法的了,這幾個方法是容易混淆的。
call,apply的用法差不多,只是參數(shù)稍微不同;(apply()接收兩個參數(shù),一個是函數(shù)運(yùn)行的作用域(this),另一個是參數(shù)數(shù)組。call()方法第一個參數(shù)與apply()方法相同,但傳遞給函數(shù)的參數(shù)必須列舉出來。)

// 以最簡單window對象為例
function sum(num1, num2) { 
return num1 + num2; 
} 
console.log(sum.call(window, 10, 10)); //20 
console.log(sum.apply(window,[10,10])); //20   這兩都相當(dāng)于window.sum(10,10); 
// 即語法:foo.call(this, arg1,arg2,arg3) == foo.apply(this, arguments) 

而bind的用法有一點差別。(只是傳一個參數(shù)對象,然后返回一個函數(shù)給接受的變量,再另外調(diào)用執(zhí)行。)

window.color = "red"; 
var o = { color: "blue" }; 
function sayColor(){ 
alert(this.color); 
} 
var OSayColor = sayColor.bind(o); 
OSayColor(); //blue 

詳情:https://www.w3cschool.cn/xqw2e7/9m2x12y0.html


文章題目:作用域和閉包(以及this的用法)
文章源于:http://weahome.cn/article/pogjcc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部