摘要:基本概念首先,函數不能存儲的值,指向哪里,取決于調用它的對象。如果沒有這個對象,那默認就是調用非嚴格模式下。也就是說是在運行的時候定義的,不是在綁定的時候定義的。
基本概念
首先,函數不能存儲this的值,this指向哪里,取決于調用它的對象。如果沒有這個對象,那默認就是window調用(非嚴格模式下)。也就是說this是在運行的時候定義的,不是在綁定的時候定義的。
function foo(num) { console.log("foo: " + num); this.count++ } foo.count = 0; for(var i = 0; i < 10; i++) { foo(i); } console.log(foo.count) //輸出是0,因為調 console.log(window.count) // 輸出是NAN, 因為window.count沒有初始值
再貼一段代碼
function foo() { var a = 2; this.bar(); } function bar() { console.log( this.a ); } window.a = 3; foo();//輸出3,這個時候,是window.foo,因為bar也是由window調用隱式綁定的問題
先看一個例子
function foo() { console.log(this.a) } var obj = { foo: foo, a: 2 } var bar = obj.foo();// 函數別名 var a = "opps, global"; obj.foo();// 輸出2 bar();// 輸出opps, global,調用bar的是window
這個情況比較容易導致我們在傳回調函數的時候,出現this指向問題
function foo() { console.log(this.a); } function doFoo(fn) { fn(); } var obj = { a: 2, foo: foo } var a = "oops, global"; doFoo(obj.foo); // 傳遞了一個函數過去,這個函數由window調用,所以最后輸出的是"opps, global"
當然我們可以很簡單地用一個bind來解決問題
doFoo(obj.foo.bind(obj)顯示綁定(未完待續)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/103595.html
摘要:運行規則根據的運作原理,我們可以看到,的值和調用棧通過哪些函數的調用運行到調用當前函數的過程以及如何被調用有關。 1. this的誕生 假設我們有一個speak函數,通過this的運行機制,當使用不同的方法調用它時,我們可以靈活的輸出不同的name。 var me = {name: me}; function speak() { console.log(this.name); }...
摘要:在我們的程序中有很多變量標識符,我們現在或者將來將使用它。當我們使用時,如果并沒有找到這個變量,在非嚴格模式下,程序會默認幫我們在全局創建一個變量。詞法作用域也就是說,變量的作用域就是他聲明的時候的作用域。 作用域 定義 首先我們來想想作用域是用來干什么的。在我們的程序中有很多變量(標識符identifier),我們現在或者將來將使用它。那么多變量,我咋知道我有沒有聲明或者定義過他呢,...
摘要:回調傳遞函數是將函數當做值并作為參數傳遞給函數。這個例子中就是因為事件綁定機制中的傳入了回調函數,產生了閉包,引用著所在的作用域,所以此處的數據無法從內存中釋放。 javascript作用域 一門語言需要一套設計良好的規則來存儲變量,并且之后可以方便的找到這些變量,這逃規則被稱為作用域。 這也意味著當我們訪問一個變量的時候,決定這個變量能否訪問到的依據就是這個作用域。 一、詞法作用域 ...
摘要:引用是從匿名函數內部引用自身的唯一方法,不過,最好的方法是避免使用匿名函數,至少在那些需要引用自身的時候,使用命名函數或者表達式。 [翻譯]Chapter1 this or that 第一次翻譯,翻譯的不好,已經再盡全力s去翻譯了,如果哪里看不明點,請出門左轉下邊原文地址 英文原文點擊這里 javascript中最令人困惑的東西就是this關鍵字,它在每個函數作用域中都會自動定義的一個...
摘要:為什么會存在跨域問題同源策略由于出于安全考慮,瀏覽器規定不能操作其他域下的頁面,不能接受其他域下的請求不只是,引用非同域下的字體文件,還有引用非同域下的圖片,也被同源策略所約束只要協議域名端口有一者不同,就被視為非同域。 showImg(https://segmentfault.com/img/remote/1460000017093859?w=1115&h=366); Why 為什么...
閱讀 2365·2023-04-25 20:07
閱讀 3303·2021-11-25 09:43
閱讀 3662·2021-11-16 11:44
閱讀 2529·2021-11-08 13:14
閱讀 3178·2021-10-19 11:46
閱讀 895·2021-09-28 09:36
閱讀 2975·2021-09-22 10:56
閱讀 2374·2021-09-10 10:51