分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 代码编程

js不管条件是否成立都要进行变量提升

发布时间:2023-09-06 02:20责任编辑:彭小芳关键词:js
### 不管条件是否成立都要进行变量提升
> 不管条件是否成立,判断体中出现的var/function都会进行变量提升;但是在最新浏览器版本当中,function声明的变量只能提前声明,不能定义了(前提:函数是在判断体重)。
```javascript
// 不管条件是否成立都要进行变量提升
console.log(num);//=>undefined
console.log(fn);//=>undefined
if (1 == 1) {
var num = 12;
function fn() {

???}
}
```

> 代码执行到条件判断地方
> [条件不成立]
> 进入不到判断体中,此时之前声明的变量或者函数依然是undefined

> [条件成立]
> 进入条件判断体中的第一件事情不是代码执行,而是把之前变量提升没有定义的函数首先定义了(进入到判断体中函数就定义了,迎合ES6中的块级作用域)。

```javascript
// 不管条件是否成立都要进行变量提升
console.log(num);//=>undefined
console.log(fn);//=>undefined
if (1 == 1) {
???console.log(num);//=>undefined
???console.log(fn);//=>函数本身---此处条件成立,先把变量提升没定义的函数首先定义了
???var num = 12;
???function fn() {

???}
???console.log(num);//=>12
???console.log(fn);//=>函数本身
}
```

> 老版本浏览器不是这样处理的:不管条件是否成立,都要进行变量提升(和新版本不一样的地方,新版本function只是声明,老版本function依然是声明+定义)

```javascript
//=>var function 没有提升变量

f = function () {
???return true;
}
g = function () {
???return false;
}
~function () {
???//=>[私有作用域]
???//变量提升:g=undefined新浏览器不管条件是否成立,都进行变量提升,只对函数进行声明
???//![]false ?[]==![]//=>true ?true&&true
???if (g() && [] == ![]) {//=> Uncaught TypeError: g is not a function
???????f = function () {//
???????????return false;
???????};
???????function g() {
???????????return true;
???????}
???}
}();

console.log(f());

console.log(g());
//新浏览器下 g is not a function
//老浏览器下 false false 273行的f是全局的,把全局修改为了false,276的g是私有作用域,跟全局没有影响,所以还是false
```

js不管条件是否成立都要进行变量提升

原文地址:https://www.cnblogs.com/kpengfang/p/9866266.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved