2011-09-09 82 views
0

我很难理解Javascript中的静态范围。任何人都可以请解释以下两种功能之间的区别为什么“function sayHi.alternate(){}”不起作用?

它正常工作,如果我这样做

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

但doenst工作,如果我这样做

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

像往常一样,感谢

回答

0

这不是有效的JavaScript:

function sayHi.alternate(){ 

声明一个函数时,这样您不能分配的属性。您只能定义要用于该功能的名称。这就是为什么在将其分配给对象属性或分配给变量时使用其他表单的原因。

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

...会给你一个语法错误。这是因为你无法命名你的功能sayHi.alternate

然而,因为一切都在JavaScript是一个对象,包括功能,你可以简单地把你的sayHi功能为对象,并添加新的方法将其与:

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

当你写function sayHi.alternate您正试图创建一个名为sayHi.alternate的函数。函数的名称中不能包含句点,因此sayHi.alternate是无效的函数名称。

当您创建sayHi.alternate= function时,您将在对象sayHi内部创建一个名为alternate的函数。

相关问题