变量的定义
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(); // TypeErrorbar(); // ReferenceErrorvar foo3 = function bar () {}
var a = function (){console.log(a);}var a = 100a()
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在编译阶段会找到所有的声明,然后用合适的作用域将他们关联起来。变量声明会在编译阶段执行。
