this&閉包

0.apply、call 有什么作用,什么區別

  • apply方法是指定this和參數的情況下調用某個函數
  • call方法是使用一個指定的this和若干個指定參數的前提下調用某個函數或方法
  • 主要區別在于call是接受this和若干個參數的列表而apply則是接受一個包含多個參數的數組

1.以下代碼輸出什么?

<pre>
var john = {
firstName: "John"
}
function func() {
alert(this.firstName + ": hi!")}
john.sayHi = func
john.sayHi()
</pre>

輸出下圖,因為這里是john在調用func,所以this的環境是john,所以他的this.firstname也就是john

Paste_Image.png

2.下面代碼輸出什么,為什么

<pre>
func()
function func() { alert(this)}
</pre>
輸出window,因為是在全局下調用的函數,所以環境就是window本身

3.下面代碼輸出什么,為什么

<pre>
function fn0(){
function fn(){
console.log(this); }
fn();}
fn0();
document.addEventListener('click', function(e){
console.log(this);
setTimeout(function(){
console.log(this); }, 200);}, false);
</pre>
第一個fn0調用輸出的是window,因為這里是在全局環境下調用的函數,所以this指代環境window。
每次單擊之后,輸出的是document和window,因為第一個this就是在監聽事件內發生的,所以輸出的this環境是document,第二個輸出window是因為兩個定時器函數比較特殊,是固定輸出window的。

4.下面代碼輸出什么

<pre>
var john = {
firstName: "John" }
function func() {
alert( this.firstName )}
func.call(john)
</pre>
輸出john,因為使用call函數把this綁定到了john上,所以輸出john

5.下面代碼輸出什么

<pre>
var john = {
firstName: "John",
surname: "Smith"}
function func(a, b) {
alert( this[a] + ' ' + this[b] )}
func.call(john, 'firstName', 'surname')
</pre>
輸出John smith,因為call的第一個參數相當于this,后兩個參數相當于func的參數

6.下面代碼有什么問題

<pre>
var module= {
bind: function(){
$btn.on('click', function(){
console.log(this) //this指什么
this.showMsg(); }) },
showMsg: function(){
console.log('饑人谷'); }}
</pre>
第一個this指代$btn,第二個也是指代btn然而btn沒有showMsg這個方法,所以應該在函數最開始聲明

Paste_Image.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 一、問答 1.apply、call 有什么作用,什么區別? call和apply都能改變執行上下文(this的指向...
    我是小韓閱讀 249評論 0 0
  • apply、call 的作用及區別 作用:在指定this值和參數值的前提下去調用函數或方法。 區別:A for a...
    柯良勇閱讀 465評論 0 1
  • 學而不思則罔,思而不學則殆 -----孔子溫故而知新 -----孔子 前言 任何的編程語言,都有其難點。 “t...
    Mr_金_閱讀 584評論 0 3
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,923評論 18 139
  • 一直想分享一下自己提高效率、知識整理的工具。 1 f.lux 護眼軟件,并且可以根據你所在的經緯度來調節,用了快一...
    detry閱讀 442評論 0 3