Когда я выполнить следующий фрагмент кода яваскрипта ...Связывание яваскрипта функции с нулевым или не определено, как thisArg
function addAndThis(n1, n2) {
console.log("THIS:" + this + " SUM:" + (n1+n2));
}
var boundNullThisAddAndThis = addAndThis.bind(null);
var boundUndefinedThisddAndThis = addAndThis.bind(undefined);
var boundStringThisAddAndThis = addAndThis.bind("TEST");
addAndThis(10, 20);
boundNullThisAddAndThis(100, 200);
boundUndefinedThisddAndThis(1000, 2000);
boundStringThisAddAndThis(10000, 20000);
... Я получаю этот выход:
THIS:[object Window] SUM:30
THIS:[object Window] SUM:300
THIS:[object Window] SUM:3000
THIS:TEST SUM:30000
первая и последняя строки выхода, как я и ожидал. Но почему связанная функция, созданная Function.prototype.bind, не вызывает завернутую функцию с нулевым или неопределенным? Я не нашел ничего такого поведения в сети.
Когда вы добавляете «use strict»; в начале функции он ведет себя так, как ожидалось, поэтому, возможно, null/undefined переводятся в окно по умолчанию, если не работает строгий режим? – sielakos
Да, если вы привязываетесь к null или undefined, это означает глобальный контекст. – cstuncsik