Функции

// Функции с переменным количеством аргументов

//function varArgs() { // for (var i = 0; i < arguments.length; i++) { // console.log('arg' + i + ' = ' + arguments[i]); // } //}

//varArgs('one', "Два", 3);

//console.log(varArgs);

//var f = varArgs;

//console.log(f);

// Область видимости

//var scope = 'глобальная область видимости'; // //function checkscope() { // var scope = 'локальная область видимости'; // // function f() { // return scope; // } // // return f; //}

//console.log(checkscope()());

//var uniqVal = (function () { // var counter = 0; // return function () { // return counter++; // } //}()); // //console.log(uniqVal);

//var obj = { // x: 1, // y: 2 //} // //function f1() { // console.log(this.x + this.y); //} // //f1(); // => NaN (this => window) //f1.call(obj); // => 3 (this => obj) // //// f1.call(obj) эквивалентно этому //obj.f = f1; //console.log(obj); // //obj.f(); // => 3 //delete obj.f; //console.log(obj);

//function f2(x = 0, y = 0) { // console.log(this); // console.log(x + y + this.x + this.y + (arguments[2] !== undefined ? arguments[2] : 0)); //} // //f2(); // => NaN (this => window) //f2(3, 4); // => NaN (this => window) //f2.call(obj, 3, 4); // => 10 (this => obj) //f2.apply(obj, [3, 4]); // => 10 (this => obj) //f2.call(obj, 3, 4, 5); // => 15 (this => obj)

//function f(x) { // console.log(this.y + x); //} // //var o = {y: 7}; //var g = f.bind(o); // bind возвращает функцию с привязанным к ней контекстом. //g(3); // = 10 //f(3); // = NaN // //// Также можно не только привязывать контекст, но и аргументы. //function f2(x, y) { // console.log(x + y); //} // //f2(2, 3); // = 5 //var bf2 = f2.bind(null, 2); // Контекст нам не нужен, а вот в первый аргумент всегда будет передаваться 2 //bf2(3); // = 5 // //// А тут уже привязка и контекста и аргументов // //function f3(y, z) { // console.log(this.x + y + z); //} // //var bf3 = f3.bind({x: 1}, 2); //bf3(4); // = 7

var scope = 'глобальная'; var f = function () { var scope = 'локальная';

return new Function('console.log(scope);'); // новые функции всегда создаются с глобальным контекстом (область видимости)

} f()(); // = 'глобальная'

Оценка статьи 0

Комментарии

Пока комментариев нет.