Определения функций Javascript - PullRequest
4 голосов
/ 07 мая 2010

Мне было интересно, почему переменная Vector, определенная в этой самореализующейся функции javascript, не требует перед ней переменную? Это просто какой-то другой тип синтаксиса для создания именованной функции? Делает ли это так, что мы не можем передать Vector в качестве аргумента другим функциям?

(function() {
    Vector = function(x, y) {
        this.x = x;
        this.y = y;

        return this;
    };

   //...snip   
})()

Ответы [ 4 ]

3 голосов
/ 07 мая 2010

Приведенная выше конструкция кода делает Vector глобальной переменной в пространстве имен, которая может быть в порядке, так как она, вероятно, предназначена для использования в качестве конструктора.

Я бы не рекомендовал добавлять в глобальное пространство имен, на самом деле взгляните на requirejs , это очень хороший способ работы с модульным JS.

2 голосов
/ 07 мая 2010

Определение Vector любым другим способом создаст его только в рамках замыкания;и не будет доступно за пределами замыкания.

(function() {
    var Vector = function(x, y) {
        this.x = x;
        this.y = y;

        return this;
    };

    function Vector() {
        // blah
    };

   //...snip   
})()

var something = new Vector() // ERROR :<

Ничто не "требует" ключевое слово var;его использование определяет область действия переменной.Неиспользование означает, что переменная создана в глобальной области видимости.

2 голосов
/ 07 мая 2010

Определение переменной без var делает ее глобальной.

1 голос
/ 07 мая 2010

Vector в этом случае будет присоединен к текущему this, который будет window. По крайней мере, в представленном вами коде, похоже, нет необходимости во вмещающей самовыполняющейся функции.

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