2015-03-06 2 views
0

У меня есть этот фрагмент кода:Пытаясь понять последнюю строку кода

(function(){ 
    var d = { 
     sayHello: function(a){ 
      document.writeln("Hello "+a) 
     } 
    } 
    this.d = d; 
})(); 

Я знаю, что это IIFE, но последняя строка смущает меня. Это для объекта d, чтобы выйти за пределы области? Он используется как API, к которому можно получить доступ, не так ли?

this.d = d означает, что d теперь является переменной по объему, готовой к использованию?

Есть ли другой способ сделать это?

+0

это весь ваш код? –

+1

Да, я начинаю писать api, сначала хочу понять, как это сделать. – user1252306

+1

если 'this' указывает на' окно' (в этом случае), то да, ваша переменная теперь доступна по всему миру – devqon

ответ

4

Поскольку IIFE вызывается непосредственно () нет «контекста», так this по умолчанию (в не-ES5-StrictMode) в window.

Поэтому линия эквивалентна:

window.d = d; 

да и, таким образом подвергая d в глобальное пространство имен.

Вы не должны использовать этот метод, потому что он несовместим с ES5 "use strict", который устанавливает this = null в отсутствие явного контекста. Я бы рекомендовал что-то вроде этого:

var MYNAMESPACE = MYNAMESPACE || {}; 
MYNAMESPACE.SUBPACKAGE = (function() { 
    ... 
    return d; 
})(); 
+0

И что я должен использовать? Я хочу инкапсулировать код, а затем выставить объект для использования в качестве API. спасибо – user1252306

+0

спасибо Alnitak! – user1252306

Смежные вопросы