«Насколько я понимаю, эта функция будет иметь глобальный охват, не так ли?»
«Сфера» о том, какие переменные функция имеет доступ (т.е. его собственных локальных переменных, а также местных жителей, объявленных в любых функций, которые оно может быть вложенными внутри, а также глобальные переменные), и что не имеет никакого отношения к делать со значением this
. Область действия зависит от того, где объявляется функция, но this
зависит от того, как вызывается функция.
"с.call(this)
проходитwindow
объект этого закрытия"
Мы не можем сказать, что только из кода показано на рисунке. Предположительно, вы имеете в виду, что этот блок кода не вложен внутри какой-либо другой функции, поэтому да, this
будет window
. Но если этот код когда-либо был вставлен внутри какой-либо другой функции, тогда this
может иметь другое значение в зависимости от того, как была вызвана эта другая функция.
«Влияет ли изменение.call(this)
просто()
изменить что-нибудь?"
Если вы используете только ()
, что будет означать, что внутри функции this
будет window
ли что изменится что-либо зависит от this
в .call(this)
ли в первую очередь window
. - как я уже говорил выше, если что блок были вложены в какой-либо другой функции this
может быть что-то еще Сказав, что для кода показано если this
было ничего, кроме window
я думаю, что ваш код будет разорвать Поскольку вы объявляете функцию как это:..
this.deleteKeyword = function(model) {...}
... а затем внутри второй обработчик щелчка вы называете то, что я предполагаю, что это означает, что та же функция без с помощью this
:
deleteKeyword($(this));
Единственный способ, который будет работать, если this
window
и функция deleteKeyword()
является глобальной. Если this
были любыми другими объектами, функция была бы свойством этого другого объекта и, следовательно, не была бы доступна непосредственно как deleteKeyword()
. Но если вы специально не хотите, чтобы deleteKeyword()
был доступен из другого кода, который не показан, нет причин создавать его как свойство this
. Просто объявить его var
:
var deleteKeyword = function(...
... и тогда он будет доступен только внутри этой функции и те, вложенные в него, такие как обработчик щелчка. И .call()
в конце вашей функции будет избыточным, поскольку функция никогда не будет использовать this
.
«Так не лучший вариант, чтобы применить JQuery объект (или, может быть, просто пустой объект) для того, чтобы повысить производительность? Не будет ли это увеличить производительность, если это будет указывать на локальную область видимости? Так как объект окна очень медленно ».
Ну, как я уже сказал, «сфера» и значение this
не связаны между собой понятия. Я не уверен, почему вы беспокоитесь о производительности для этого кода. Но если вы должны применить jQuery или пустой объект с .call(jQuery)
или .call({})
, код не будет работать, как описано выше.
Возможно, дубликат этого вопроса: http://stackoverflow.com/questions/8035822/why-write-callthis-at-the-end-of-an-javascript-anonyms-function –
Он будет явно связывать контекст закрытия к контексту родителя. То же, что и '(function() {}). Apply (this)' –
Обратите внимание, что я бы определил «область» как информацию о том, к каким переменным имеет доступ функция (т. Е. Собственные локальные переменные плюс те, вложенное внутри), и это не имеет ничего общего со значением 'this'. – nnnnnn