Javascript函数中var和this之间的区别?

Javascript函数中var和this之间的区别?,javascript,syntax,Javascript,Syntax,这两个代码块之间有什么区别吗?抱歉,如果以前有人问过这个问题。var在tools.triangle中创建一个局部变量。变量originX和originY不能与工具外部进行交互。三角形此是指向当前正在处理的对象的指针。第二个示例可以通过执行newtools.triangle()为对象赋予属性。如果不使用new而只使用tools.triangle(),此将指向全局对象,即窗口对象。您可以使用函数方法更改此指向的对象,如下所示: var tools = {}; tools.triangle = fu


这两个代码块之间有什么区别吗?抱歉,如果以前有人问过这个问题。

var
tools.triangle
中创建一个局部变量。变量
originX
originY
不能与
工具外部进行交互。三角形
<代码>此是指向当前正在处理的对象的指针。第二个示例可以通过执行
newtools.triangle()为对象赋予属性。如果不使用
new
而只使用
tools.triangle()
将指向全局对象,即
窗口
对象。您可以使用函数方法更改此
指向的对象,如下所示:

var tools = {};

tools.triangle = function() {
    this.originX = 0;
    this.originY = 0;
}
重要的是要知道,
可以引用任何对象,也可以在ES5严格模式下未定义或
null


您可以找到更多信息。

在第一个示例中,X和Y都作为局部变量存在于变量
三角形中保存的闭包中


在第二个示例中,X和Y作为对象
工具的变量存在。三角形
,因为使用
这个
变量是私有的
这个
变量是公共的。@elclars该注释没有帮助,因为它具有误导性。变量可以声明为全局变量,
与执行上下文相关,它不是通常意义上的变量,尽管它可以被视为局部变量。
需要更多的解释,它由调用设置,可以引用任何对象,以及在ES5严格模式下未定义或
null
。@0x499602D2感谢您的回答。我真的在找这个。我也不知道
call
(和
apply
)方法可能会改变范围。当不使用
new
时,答案需要围绕场景进行更正。由于
triangle
tools
对象的一个实例函数,
指向
tools
对象并调用
tools.triangle()
将实际在tools对象上创建属性
originX
originY
var tools = {};

tools.triangle = function() {
    this.originX = 0;
    this.originY = 0;
}
var myObj = {};

tools.triangle.call( myObj );

// "this" in tools.triangle now points to myObj
// myObj now has the properties originX and originY