function bind(f, context){
return function (){
return f.apply(context, arguments)
};
}
function f(a){
console.log(this);
console.log(a);
}
var a = bind(f, 'ada', 'fak');
console.log(a())
1) Функция bind() получает аргументы f(функция) и context;
2) Внутри bind() есть анонимная функция, где первый аргумент получает метод apply и становится его context, а 2 аргумент выводится в console.log(); правильно ?
bind вызывается с тремя аргументами: f, 'ada' и 'fak'. Переменная a ждёт возвращаемый функцией результат.var a = bind(f, 'ada', 'fak');
f(сюда после вызова попадает функция) и context(сюда строка 'ada'), третий аргумент (строка 'fak') упускается.function bind(f, context)
bind сразу же возвращает другую анонимную функцию, которая в свою очередь возвращает результат вызова параметра f. Однако вызов здесь не простой, а методом apply, первый параметр которого в итоге станет контекстным объектом this внутри вызываемой функции, а второй параметр - массив с аргументами для вызываемой функции. В данном случае вторым параметром передаётся псевдомассив arguments, который по умолчанию есть в каждой НЕ стрелочной функции и содержит в себе, соответственно, все переданные в функцию аргументы в виде массива. В нашем случае он будет пуст, так как переменная a, содержащая в себе эту анонимную функцию, в конце концов будет вызвана без аргументов (console.log(a()))return function (){
return f.apply(context, arguments)
};
f имеет 1 параметр a, который в нашем случае будет undefined, так как массив аргументов, при вызове через метод apply, был пуст.function f(a)
console.log(this); возвращает такой объект, так как в метод apply первым аргументом мы передали строку 'ada', которая затем неявно преобразовалась в объект.function bind(fnToCall, objectThis, args){
return function (){
return fnToCall.apply(objectThis, args)
};
}
function f(a){
console.log(this);
console.log(a);
}
var a = bind(f, {
text: "Hello"
}, ["Another argument"]);
a()
В функцию bind вы передаете функцию f, которая вызвается так, что this внутри функции f равен objectThis. Третьим аргументом является массив, который передает аргументы функции f. Попробуйте использовать разные значение аргументов, которые вы передаете в функцию bind, чтобы хорошо разобраться.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости