Javascript 对象内部的变量绑定

Javascript 对象内部的变量绑定,javascript,Javascript,在以下代码中: var a = 1; var boat = { a:2, innerBoat: {a:3, print(){console.log(a);}, }, }; boat.innerBoat.print(); //output: 1 我不明白为什么console.log(a);in print方法返回值1。 另外,boat引用的对象

在以下代码中:

var a = 1;
var boat = { a:2, 
             innerBoat: {a:3, 
                        print(){console.log(a);},
                        },
            }; 
boat.innerBoat.print();  //output: 1
我不明白为什么console.log(a);in print方法返回值1。

另外,boat引用的对象的大括号{}是否在运行时在堆栈中创建了一个新的私有执行上下文?(我知道只有函数调用才能在运行时创建新的私有执行上下文,但对象创建让我感到困惑,因为它们最初是构造函数调用:

var boat = new Object();

在javascript中,
对象
实际上只是一个数据集合,就像许多其他语言中的词典一样

var boat=new Object();
只是创建了一个空对象,就像您创建了
var boat={};

如果您正在寻找更类似的东西,您可以尝试使用ES6类

var a=0
班船{
构造函数(){
这是a=1;
}
打印(){
console.log(this.a);
}
}
var船=新船()
boat.print();//输出:2

在javascript中,
对象实际上只是一组数据,就像许多其他语言中的词典一样

var boat=new Object();
只是创建了一个空对象,就像您创建了
var boat={};

如果您正在寻找更类似的东西,您可以尝试使用ES6类

var a=0
班船{
构造函数(){
这是a=1;
}
打印(){
console.log(this.a);
}
}
var船=新船()
boat.print();//输出:2
我不明白为什么console.log(a);in print方法返回值1

它记录变量的值
a

它周围的各种对象的属性,也有名称
a
不是变量。它们只能作为对象的属性引用

常数a=1;
常量对象={
a:2
};
控制台日志(a);
console.log(object.a)
我不明白为什么console.log(a);in print方法返回值1

它记录变量的值
a

它周围的各种对象的属性,也有名称
a
不是变量。它们只能作为对象的属性引用

常数a=1;
常量对象={
a:2
};
控制台日志(a);

console.log(object.a)
您声明了全局变量a,并在console.log中返回。使用boat.a和return 2,使用boat.innerBoat.a和return 3,使用this.a和return 3。您声明了全局变量a,并在console.log中返回。使用boat.a和return 2,使用boat.innerBoat.a和return 3,使用this.a和return 3。