在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/HTML/ JavaScript中bind綁定失效

JavaScript中bind綁定失效

第一段代碼:

function add(){
    console.log(this.x + this.y);
};

var obj = {
    x: 2,
    y: 3
};

setTimeout(add.bind(obj), 1000);

上面回調(diào)函數(shù),能正確調(diào)用,顯示結(jié)果 5
圖片描述

第二段代碼:

將函數(shù)中的 console.log 改成 return
function add(){
    return (this.x + this.y);
};

var obj = {
    x: 2,
    y: 3
};

setTimeout(add.bind(obj), 1000);

上面回調(diào)函數(shù),沒(méi)有調(diào)用結(jié)果,也沒(méi)報(bào)錯(cuò)???

回答
編輯回答
汐顏

console.log的作用就是輸出信息, 你都沒(méi)地方顯示輸出 add 函數(shù)的 return 值

2018年5月19日 17:21
編輯回答
安若晴

你在js文件中寫(xiě)

var a = 1;
console.log(a); // 控制臺(tái)會(huì)輸出 1
var a = 1;
a; // 控制臺(tái)沒(méi)輸出,因?yàn)槟悴](méi)有讓它輸出。
2018年7月3日 23:39
編輯回答
深記你

你并沒(méi)有打印它啊,你可以這樣:

setTimeout(function() {
  console.log(add.bind(obj)());
}, 1000);
2017年8月7日 11:07
編輯回答
野橘

控制臺(tái)

  • 一是記錄各處報(bào)錯(cuò)、提醒以及 console.log 等處要求記錄的內(nèi)容;
  • 二是返回最后一個(gè)在控制臺(tái)中運(yùn)行的返回控制臺(tái)環(huán)境的值。

你也可以看到明顯差別:

// Test 1
> var a = 1; console.log(a)
  1
< undefined
// Test 2
> var a = 1; a
< 1

> 是輸入,要求控制臺(tái)執(zhí)行的東西;
< 是輸出,要求執(zhí)行的東西向控制臺(tái)返回了什么;
Test 1 中前面白白的空空的 1 是某段 JS 要求控制臺(tái)記錄的。

理解后看題,< 2094,2094 是該 setTimeout 返回的一段瀏覽器用于標(biāo)記的基本無(wú)意義數(shù)字,(好像只能用于 clearTimeout)具體自查。而因?yàn)槟闶窃诳刂婆_(tái)執(zhí)行,所以它返回給控制臺(tái),所以控制臺(tái)出現(xiàn)了 2094。然后那個(gè) 5 前面白白的,說(shuō)明是某段代碼要求記錄的。

第二段的 return 即返回,因?yàn)檫@段代碼是 setTimeout 執(zhí)行的,所以它返回給 setTimeout(還是 window?反正不是控制臺(tái)),而不是控制臺(tái),對(duì)于控制臺(tái)已經(jīng)不可能會(huì)有值返回給它了(原因不解釋?zhuān)?,所以控制臺(tái)返回最后一個(gè)返回給它的值,也就是另一段標(biāo)記那個(gè) setTimeout 的隨機(jī)無(wú)意義數(shù)字。且也沒(méi)有什么 console.log 要求記錄,所以就不再有新結(jié)果。

而不是什么 bind 失效。

再想想回看別的答主的答案。這個(gè)問(wèn)題可能因太簡(jiǎn)單,可能都沒(méi)多少人想理你…

2017年7月27日 06:12
編輯回答
陌璃

第二種是會(huì)輸出的
clipboard.png

2017年8月27日 01:48