分享web开发知识

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

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

js学习日记-变量的坑

发布时间:2023-09-06 01:59责任编辑:沈小雨关键词:js

js变量细节是前端面试经常遇到的问题,可见其重要程度,要想掌握这个知识点,需注意以下几点:

变量提升

所谓变量提升,就是使用了var关键字申明的变量,会提升到所在作用域的顶部。es5的作用域分为全局作用域和函数作用域,es6(es2015)增加了块级作用域

 ?function test(){ ???console.log(i); //输出undefined而不是报错 ???var i=5; ?}

 上面代码实际上等于

 ?function test(){ ???var i; ???console.log(i); //输出undefined而不是报错 ???i=5; ?}  

需要注意的是函数表达式中的var也存在变量提升。

不加var的变量

当一个变量没有使用var关键字申明时,执行到该语句时,对应的变量会变成全局变量(不管是不是在函数中声明的),等同于windows.xxx=y;

 ?function test(){ ???i=5; ???console.log(i); ??} ?try{ ???console.log(i); ?} ?catch(e){ ???console.log(‘还没有执行到i=5,出错啦‘) ?} ?test(); ?//访问函数后,i=5执行,变成全局变量了,因此下一句可以顺利执行 ?console.log(‘验证i是否变成了全局变量,i=‘+i);

全局变量名与函数作用域变量名相同时会发生什么?

既然变量存在全局作用域和函数作用域,那个两个作用域中有同名变量也是互不影响的

 ?var i=5; ?function test(){ ???var ?i=2; ???console.log(‘我是函数中的i,i=‘+i); //2 ?} ?test(); ?console.log(‘我是全局中的i,i=‘+i); //5

 访问一个不存在的变量会发生什么?

访问未显示申明或隐式申明的变量时,js引擎直接抛出错误。

js学习日记-变量的坑

原文地址:https://www.cnblogs.com/94pm/p/9174829.html

知识推荐

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