我试图让功能在adobe animate canvas的主时间轴内工作。我有那个代码:
function player(){
var power = 19;
}
console.log(this.power);
当我执行它时,它表示未定义。任何人都可以解释为什么?
答案 0 :(得分:3)
在方法player()
中定义一个本地变量power
,它只存在于该函数的范围内,其他地方没有这样的变量。所以当你写的时候你实际上指的是全局变量window.power
( this
是window
在这种情况下)不是定义
最后一点,当你纠正这个时,你仍然需要执行这个功能。
您可以全局定义power
或在函数内运行console.log
定义该变量:
第一种情况:
var power;
function player() {
power = 19;
}
player();
console.log(power);
第二种情况:
function player(){
var power = 19;
console.log(power);
}
player();
注意:每当您尝试访问任何函数范围之外的变量时,它都将window
对象作为window.someVariable
访问,因此在这种情况下您可以{ {1}}与上面的两个例子一样。
答案 1 :(得分:1)
' this' keyword指的是哪个对象正在调用一个函数,不是实际的函数本身。
例如:
让玩家= { func:function(){ 的console.log(this.power); }, 权力:10}
player.func();
//将记录10因为您从玩家对象调用了该函数,并且有一个属性player.power并且它等于10.
//对比:现在在全局范围内创建一个变量,并将相同的函数存储到新变量中:
让sameFunction = player.func;
//引擎盖下,上面的代码将是:
window.sameFunction = player.function或window.sameFunction = func: function(){console.log(this.power);}
sameFunction();
将记录undefined,因为sameFunction指向存储在player.func BUT 中的函数,您正在从全局对象调用它,并且该对象没有名为power的属性。
调用sameFunction()与window是全局对象时调用window.sameFunction()相同。您的窗口对象没有名为power的属性;所以这个力量是未定义的。
(当你看到函数声明中使用的'这个词时,它可能是一个构造函数。这些函数的结构是为了创建对象。要使用它们,你必须理解新的关键字及其作用)。