【问题标题】:Why doesn't "function sayHi.alternate () {}" work?为什么“函数sayHi.alternate(){}”不起作用?
【发布时间】:2011-11-13 12:09:39
【问题描述】:
我很难理解 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();
一如既往的感谢
【问题讨论】:
标签:
javascript
function
public
【解决方案1】:
function sayHi.alternate(){
alert("Hola");
}
...会给你一个语法错误。那是因为你不能将你的函数命名为sayHi.alternate。
但是,由于 Javascript 中的所有内容都是一个对象,包括函数,您可以简单地将您的 sayHi 函数视为一个对象,并为它添加一个新方法:
sayHi.alternate = function(){
alert("Hola");
}
【解决方案2】:
当您编写function sayHi.alternate 时,您正在尝试创建一个名为sayHi.alternate 的函数。函数名称中不能包含句点,因此sayHi.alternate 是无效的函数名称。
当您创建sayHi.alternate= function 时,您将在对象sayHi 中创建一个名为alternate 的函数。
【解决方案3】:
这不是有效的 javascript:
function sayHi.alternate(){
以这种方式声明函数时,您不能分配属性。您只能定义要用于该函数的名称。这就是为什么在将它分配给对象属性或分配给变量时使用另一种形式的原因。