Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> чем отличается call(this) от call() 
:(
    Опции темы
Сisa
Дата 2.2.2015, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 18.1.2013

Репутация: нет
Всего: нет



Тут habrahabr.ru/post/199456/  связывается функция с контекстом: var bound = returnFoo.bind(context);

Два моих варианта кода:
Код

(function() {
 alert(1)
}).call(this)


Код

(function() {
 alert(1)
}).call()

оба выполняются, непонятна роль this в первом, и возможность отсутствия this/объекта/контекста во втором варианте.
Чем отличаются эти две записи?

PM MAIL   Вверх
diadiavova
Дата 2.2.2015, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 11
Всего: 142



Попробуй так
Код


        function showValue ()
        {
            alert(this.value);
        }
        showValue.call();
        var value = "qwerty"
        showValue.call();
        showValue.call({value:"Привет"});




--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Сisa
Дата 3.2.2015, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 18.1.2013

Репутация: нет
Всего: нет



diadiavova спасибо! я почти понял :
Код

function showValue (){
 alert(this.value);
}
showValue.call();//понятно что ничего не выдаст, т.к. value еще нигде не фигурирует
var value = "qwerty";//так это же глобальная переменная, ее и покажет
showValue.call();// покажет глобальную переменную value, т.к. this в данном случае документ
showValue.call({value:"Привет"});//а здесь передается в контексте объект со свойством value, которое равно Привет
showValue.call(this);// а так "qwerty"

однако этот this все равно какой то "тугой" для нормального восприятия  smile
Код

function showValue2(){
 var x=1;
 this.x=2;
}
showValue2.call();
alert(x);
//showValue2.call(this);
//alert(x);


PM MAIL   Вверх
diadiavova
Дата 3.2.2015, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 11
Всего: 142



Цитата(Сisa @  3.2.2015,  19:53 Найти цитируемый пост)
т.к. this в данном случае документ

window. Все переменные и функции, объявленные на глобальном уровне становятся полями объекта window и в данном случае this тоже будет ссылаться на него.
Цитата(Сisa @  3.2.2015,  19:53 Найти цитируемый пост)
а здесь передается в контексте объект со свойством value, которое равно Привет

Ну то есть, что передашь функции колл, на то и будет ссылаться this внутри вызываемой функции.
Цитата(Сisa @  3.2.2015,  19:53 Найти цитируемый пост)
Код

function showValue2(){
 var x=1;
 this.x=2;
}
showValue2.call();
alert(x);

Код не запускал, но рискну предположить, что алерт выдаст 2. Локальная переменная икс за пределами функции не видна, поэтому попытки достучаться до нее оттуда ни к чему не приведут. Когда ты выполняешь функцию, то выполняется this.x = 2, а поскольку контекст ты не задал, то this будет ссылаться на window, стало быть в этом контексте следующие строки будут эквивалентны
Код

this.x = 2;
window.x = 2;

А последняя, в свою очередь, по причине, которую я объяснил выше будет равнозначна такому объявлению на глобальном уровне
Код

var x = 2;

Собственно, исходя из этих рассуждений, я и  думаю, что твой алерт должен выдать двойку.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Сisa
Дата 3.2.2015, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 18.1.2013

Репутация: нет
Всего: нет



diadiavova  я Вам благодарен за разъяснение! Понимаю что Вы мне говорите, т.к. не раз уже перечитывал об этом самом this, и что такое локальная и глобальная переменная, и что они отличаются областью видимости, и временем жизни, и что есть замыкание, и есть инкапсуляция,  но в данной записи, когда аргументы в функцию не передаются, моск попросту сопротивляется и автоматом напрочь отказывается понимать smile

Спасибо!

(конечно 2 и конечно window)

__________________



" что передашь функции колл, на то и будет ссылаться this внутри вызываемой функции. " - это надо в учебниках написать, и все сразу будет понятно  !!!!!!!!!! 


Это сообщение отредактировал(а) Сisa - 3.2.2015, 22:34
PM MAIL   Вверх
_zorn_
Дата 4.2.2015, 03:29 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1076
Регистрация: 21.8.2007

Репутация: 1
Всего: 12



Я бы не стал использовать такой код в своих приложениях.
И бил бы по пальцам тех кто пытается запутать других, показав себя умным....

Яваскрипт не без изъянов, но давайте выставим их все напоказ что ли ?
Неужели нельзя использовать всем понятные конструкции ?
PM MAIL   Вверх
diadiavova
Дата 4.2.2015, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 11
Всего: 142



Цитата(_zorn_ @  4.2.2015,  03:29 Найти цитируемый пост)
Я бы не стал использовать такой код в своих приложениях.

Какой именно?
Цитата(_zorn_ @  4.2.2015,  03:29 Найти цитируемый пост)
И бил бы по пальцам тех кто пытается запутать других, показав себя умным....

В теме рассматривались простейшие аспекты использования стандартной функции языка. Ты действительно полагаешь, что всякий, кто ее использует, делает это исключительно с целью показать себя слишком умным запутать тебя? Это тебя настолько раздражает, что тебе хочется наносить таким людям увечья? Хочешь поговорить об этом? smile 
Цитата(_zorn_ @  4.2.2015,  03:29 Найти цитируемый пост)
Яваскрипт не без изъянов

О каких изъянах речь в данном случае?
Цитата(_zorn_ @  4.2.2015,  03:29 Найти цитируемый пост)
но давайте выставим их все напоказ что ли ?

Предлагаешь скрывать правду? smile 
Цитата(_zorn_ @  4.2.2015,  03:29 Найти цитируемый пост)
Неужели нельзя использовать всем понятные конструкции ? 

Конструкций, понятных всем, не существует. Понятно тебе будет только то, в чем ты дал себе труд разобраться.




--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0569 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.