gpt4 book ai didi

javascript - JavaScript 中的 var 变量与 this 不同吗

转载 作者:行者123 更新时间:2023-12-04 17:53:29 26 4
gpt4 key购买 nike

我对术语 var 和在 JavaScript 构造函数中使用关键字 this 声明变量有点困惑。例如,在下面的代码中,var title 是一个不同于 happySongs[0].title 的变量。它们都用不同的东西初始化。 title 在构造函数中初始化为 song 参数,title 也在构造函数之外初始化。但是,它们都返回不同的东西。如果您打印出 happySongs[0].title,它会为您提供新值。但是,如果您打印出 concat() 方法,那么 title 将不会有新值“test”,而是旧值……所以这里发生了两件不同的事情?这些是单独的变量吗?在函数构造函数中使用 varthis 声明变量时有区别吗?

function Tune(song,artist) {
var title = song;
this.concat = function() {
return title + " " + artist;
}
}

var happySongs = [];
happySongs[0] = new Tune("Putting on the Ritz", "Ella Fitzgerald");

happySongs[0].title = 'test'
//prints out test
console.log(happySongs[0].title);

// prints out correct title and artist
console.log(happySongs[0].concat());

最佳答案

它们是不同的。

var title = song;

是构造函数中的局部作用域变量。

happySongs[0].title = 'test'

正在构造的 Tune 对象上创建一个 title property。改变一个不会影响另一个。在构造函数中声明的 concat 函数可以访问在外部作用域中声明的局部范围的 title 变量。如果您改为引用 this.title,您将获得以下属性:

this.concat = function() {
return this.title + " " + artist;
}

如果将以上内容放在您的原始代码中,将导致最后一行:

console.log(happySongs[0].concat());

输出"test Ella Fitzgerald"

关于javascript - JavaScript 中的 var 变量与 this 不同吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33306792/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com