2016-01-06 4 views
-1

я создал выражение функции в JavaScript:Javascript IIFE Сразу вызывается функция Expression

var MKObjects = MKObjects || {}; 

MKObjects.spReporting = (function() { 
    // methods 
})(); 

и она отлично работает - проблема: как я могу найти его в окне консоли?

Он не был создан в глобальном пространстве имен - он, по-видимому, не определен на объекте окна.

Когда я печатаю MKObjects или MKObjects.spReporting в окне консоли, ничего не получаю.

+2

Если 'MKObjects' не является глобальным, вы не можете получить к нему доступ из глобальной области. Это не имеет никакого отношения к IIFE. Вы можете сделать это глобально явно, выполнив 'window.MKObjects = MKObjects;', если это то, что вы хотите. –

+0

«SyntaxError: missing» после списка аргументов « – Quentin

+1

@Quentin: Я думаю, что это просто опечатка в вопросе:' (() '->')() '. –

ответ

0

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

В противном случае, если MKObjects не является глобальным и недоступен из глобального (то есть в глобальном var), то вы не сможете получить к нему доступ с консоли.

Например:

(function() { 
    var x = ...; 
})() 

Вы не можете получить доступ x в отладчике, потому что это не видно из глобального масштаба.

var x; 
(function() { 
    x = ...; 
})() 

Вы можете получить доступ к x, потому что это глобальный.

var y; 
(function() { 
    var x = ...; 
    y.propertyX = x; 
})() 

Вы можете получить доступ к x через y глобальной по y.propertyX

(function() { 
    var x = ...; 
    debugger; // or breakpoint 
})() 

Вы будете иметь временный доступ к x из окна отладчика, когда выполнение кода достигнет этой точки.

Тот факт, что ваше задание является результатом анонимной функции, вызываемой немедленно, не имеет значения.

+0

Спасибо, я смог установить точку останова и получить то, что мне нужно. Является ли это хорошей стратегией Что касается не загрязняющих глобальное пространство имен? Кажется, что в моей ситуации это нормально, и я могу вернуть только те методы, которые хочу публиковать. –

+0

Да. Это звучит неплохо. Вам следует избегать загрязнения глобального пространства имен, и если единственная причина «видеть» эту переменную для отладки, вы можете использовать операторы отладчика/точки останова. Если этот ответ решает вашу проблему, примите (галочку) и/или повысьте (стрелка), чтобы отметить как разрешенные/полезные. – arcyqwerty

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