javascript - 關于this的一個疑問
問題描述
如圖所示,請問各位大佬,為什么foo.call()第一個參數是window?
問題解答
回答1:其實問題關鍵是對于call/apply函數的作用不理解。用官方的話來說是,改變作用域上下文,只是這里為將局部的上下文改變為window。其實call/apply是一種'借刀殺人'的方法,就是自己沒有某個屬性或方法,然后想調用其他對象的屬性或方法,也是對象繼承的一種實現方式。
回答2:其實不是必須是windouws 也沒比用用call 只需要在f里面聲明 var that=this 把閉包的函數的this寫成that就好了,這是因為閉包的函數 不能直接得到上層函數的環境變量 只能得到windous 所以聲明就ok 了 不懂的可以問我
回答3:如果是前端,函數有一個隱形的參數this,默認的就是指向window這個全局變量。除非你改變this指向的對象 比如foo.call(其他對象)原句是用了默認的this參數注解是明確聲明了this指向的就是window
我再寫幾句,否則說去清楚
var foo = function () { console.log(this.x);}foo();為什么this指向window呢
另外this的語義是 指向調用本函數的對象。每個函數都需要一個對象來調用obj.f()表示f被obj的調用而前端如果沒有指定調用對象,默認的都是全局變量window來調用函數
回答4:javascript在設計的時候就會將內部函數(即函數體中的函數)中的this綁定到全局對象(即window)上,我覺得這里注釋寫著foo.call(window)應該只是用js語言來解釋了一下為什么foo()中的this.x會輸出10。
回答5:沒有說foo.call的第一個參數必須是window,題主要理解的是什么是call。
https://developer.mozilla.org...
回答6:可以了解下call,apply,bind的作用與區別
相關文章:
1. angular.js - 如何通俗易懂的解釋“依賴注入”?2. 我在centos容器里安裝docker,也就是在容器里安裝容器,報錯了?3. 老哥們求助啊4. 我的html頁面一提交,網頁便顯示出了我的php代碼,求問是什么原因?5. django - 后臺返回的json數據經過Base64加密,獲取時用python如何解密~!6. html5 - angularjs中外部模版加載無法使用7. css3 - 請問一下在移動端CSS布局布局中通常需要用到哪些元素,屬性?8. tp6表單令牌9. node.js - node 客戶端socket一直報錯Error: read ECONNRESET,用php的socket沒問題哈。。10. ubuntu PPA 更新老是不成功該怎么辦
