var a = 100
function test(){
var b = a * 2
var a = 200
var c = a/2
console.log(b)
console.log(c)
}
test() nan 100
> 解析:
>
> 1.首先这段代码形成了全局作用域与函数作用域
>
> 2.全局作用域有一个变量a赋值为100
>
> 3.在test函数作用域中定义了局部变量b,a,c
>
> 4.这里又存在变量提升,在函数作用域内先进行变量提升var b; var a; var c;
>
> 5.再对b进行赋值,这时候a还没有被赋值,所以a的值为`undefined`,再将a*2,所以b为`NaN`
>
> 6.再给a赋值为200,c赋值为a/2等于100
>
> **所以最终会打印出 NaN,100**
当可执行代码内部访问变量时,会先查找当前作用域下有无该变量,有则立即返回,没有的话则会去父级作用域中查找...一直找到全局作用域。我们把这种作用域的嵌套机制称为作用域链
判断对象的原型对象是谁
console.log(Person.prototype.isPrototypeOf(one)); // true
console.log(Object.getPrototypeOf(one) == Person.prototype); // true