您现在的位置是:首页 > Javascript
当前栏目
Javascript中的var变量声明作用域问题
2023-03-07 09:39:24 时间
先看一下这两段代码的执行结果
var name2 = 'What!';
function a() {
if (typeof name2 === 'undefined') {
console.log('Undefined');
var name2 = 'Jack';
} else {
console.log('Hello ' + name2);
}
}
a();
将if语句中的var声明注释掉
var name2 = 'What!';
function a() {
if (typeof name2 === 'undefined') {
console.log('Undefined');
//var name2 = 'Jack';
} else {
console.log('Hello ' + name2);
}
}
a();
前一个会输出Undefined
, 后一个会输出Hello What!
. 说明在if里的var变量声明, 会影响到外部.
再运行一个代码
function f1(){
if (typeof name3 === 'undefined') {
console.log("undefined");
var name3 = "anything";
}
if (typeof name3 !== 'undefined') {
console.log("defined!");
}
}
f1();
if (typeof name3 === 'undefined') {
console.log("undefined outside");
}
这段代码会输出
undefined
defined!
undefined outside
说明这个影响的范围仅在于函数内部, 不会影响到函数外
说明
JavaScript的变量声明没有块级作用域, 例如在Java中, 可以这样声明b, 这个b的作用域仅在于if内部
if (a == null) {
String b = "c";
}
在JavaScript中, 只有两种作用域: 全局和局部, 在函数内任意语句中使用var声明的变量, 不管所在的语句块实际是否会执行, 都等价于在函数开头声明, 前面的代码等价于
var name2 = 'What!';
function a() {
var name2;
if (typeof name2 === 'undefined') {
console.log('Undefined');
name2 = 'Jack';
} else {
console.log('Hello ' + name2);
}
}
a();
这样产生的输出就容易理解了.
相关文章
- 通过分析gin、beego源码,读懂web框架对http请求处理流程的本质
- 搭建和mybatis-plus官网一样主题的网站(cos+宝塔+vercel)
- 零代码实现EDI标准报文转换
- 【无标题】
- 或许是我们学错了方向?
- 这么做,你也可以开发JavaScript库!【留言送书】
- 缓存预热?你没用过?
- 如何突破技术瓶颈(适合P6以下)
- 识别网站cms的小方法
- C2D 代码转设计稿是怎么实现的?
- CSS 的快乐:画一个可爱的三只小鸟 Button
- box-shadow 高阶玩法:纯 CSS 画蒙娜丽莎和星空
- JS 的 9 种作用域,你能说出几种?
- 微前端方案 qiankun 的样式隔离能不用就别用吧,比较坑
- 2023-01-05:konradkleine/docker-registry-frontend是registry的web界面工
- 2023-01-07:hyper/docker-registry-web是registry的web界面工具之一。请问部署在k3s
- 2023-01-13:joxit/docker-registry-ui是registry的web界面工具之一。请问部署在k3s中
- 干货|以Vue为例,如何提升小程序开发效率?
- springboot异常处理之404
- SpringBoot 多环境设置 active: @profileActive@