变量的定义
var
let
const
var let const比较
变量的类型
问题:如何判断变量的类型?
变量的类型转换
基础类型通过valueOf进行隐式转换
例如:如何让(a==1&&a==2)条件成立?
let a = {
value : 0,
valueOf: function (){
this.value++;
return this.value;
}
}
console.log(a==1&&a==2)
变量的声明与函数声明
a = 1;
var a;
console.log(a);
console.log(b);
var b = 2;
foo();
function foo () {
console.log(a);
var a = 2;
}
foo2();
var foo2 = function bar () {
console.log(a);
var a = 2;
}
foo3(); // TypeError
bar(); // ReferenceError
var foo3 = function bar () {}
var a = function (){
console.log(a);
}
var a = 100
a()
var a = function (){
console.log(a);
}
a()
let b = 10;
(function b (){
b = 20;
console.log("inner-b",b)
})()
console.log("outter-b",b)
let b = 10;
(function b (){
var b = 20;
console.log("inner-b",b)
})()
console.log("outter-b",b)
1.所有声明(变量和函数)都会被移动到各自作用域的最顶端,这个过程被称为提升。
2.函数表达式等各种赋值操作并不会被提升。
3.函数优先原则。
4.尽量避免产生提升问题。
JS在编译阶段会找到所有的声明,然后用合适的作用域将他们关联起来。变量声明会在编译阶段执行。