js - 变量声明和函数声明(var)

一、问题

	console.log(a);
    var a = 1;
    var a = function(){
        console.log(2);
    }
    function a(){
        console.log(3);
    }
    console.log(a);

二、解决

1. 变量声明提升
	...
	var a = 10;
等于
	// 预编译
	var a; // 声明会被提到当前作用域的顶端
	// var的作用域只有两种,全局作用域和函数作用域
	...
	// 执行阶段
	a = 10; // 赋值语句位置不变
2. 函数声明提升
	...
	function f() {
        console.log('function');
    }
等于
	// 预编译
	var f; 
	f = function () {
        console.log('function');
    };
    ...
3. 变量提升和函数声明提升冲突
	console.log(a); // f a(){console.log('function');}
    var a = 10;
    function a() {
        console.log('function');
    }
    console.log(a); // 10
等于
	// 函数声明优先
	var a; // 函数a
	a = function(){
		console.log('function');
	}

	var a; // 变量a, var是可以重复声明的,且不影响已经赋的值
	
	console.log(a); // f a(){console.log('function');}
	
	a = 10; 
	
	console.log(a); // 10
4. 函数声明和函数表达式冲突(跟3一样)
	// 函数声明
	function f(){
		console.log('function');
	}
	
	// 函数表达式(变量式声明)
	// 函数表达式定义的函数必须先声明后调用,不然报错a is not define
	var f = function(){
		console.log('var');
	}

三、实际面试题

	console.log(a); // f a(){console.log(3)}
    var a = 1;
    var a = function () {
        console.log(2);
    }
    function a() {
        console.log(3);
    }
    console.log(a); // f a(){console.log(2)}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值