Почему «функция sayHi.alternate () {}» не работает? - PullRequest
0 голосов
/ 09 сентября 2011

Мне трудно понять статическую область видимости в Javascript. Может кто-нибудь объяснить, пожалуйста, разницу между двумя ниже функциями

Работает нормально, если я делаю

function sayHi(){
        alert("Hi");
    }
    sayHi.alternate=function(){
        alert("Hola");
    }
    sayHi();
    sayHi.alternate();

Но работай, если я делаю

function sayHi(){
        alert("Hi");
    }
    function sayHi.alternate(){
        alert("Hola");
    }
    sayHi();
    sayHi.alternate();

Как обычно Спасибо

Ответы [ 3 ]

3 голосов
/ 09 сентября 2011

Когда вы пишете function sayHi.alternate, вы пытаетесь создать функцию с именем sayHi.alternate. Функции не могут содержать точку в своих именах, поэтому sayHi.alternate является недопустимым именем функции.

Когда вы создаете sayHi.alternate= function, вы создаете функцию с именем alternate внутри объекта sayHi.

3 голосов
/ 09 сентября 2011
function sayHi.alternate(){
    alert("Hola");
}

... выдаст синтаксическую ошибку.Это потому, что вы не можете назвать свою функцию sayHi.alternate.

Однако, поскольку все в Javascript является объектом, , включая функции , вы можете просто рассматривать вашу функцию sayHi как объект, идобавить новый метод к нему с помощью:

sayHi.alternate = function(){
    alert("Hola");
}
0 голосов
/ 09 сентября 2011

Это недопустимый JavaScript:

function sayHi.alternate(){

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

...