发布于2021-03-07 22:01 阅读(1160) 评论(0) 点赞(18) 收藏(2)
代码演示
console.log(a); // undefined ===> a已声明还没赋值,默认得到undefined值
var a = 100;
console.log(b); // 报错:b is not defined ===> 找不到b这个变量
let b = 10;
console.log(c); // 报错:c is not defined ===> 找不到c这个变量
const c = 10;
接下来这段代码
function fn() {
//var a
if (true) {
console.log(a + ' now')
}
else {
var a = 1
console.log(2)
}
}
fn() // a -> undefined
此时我们会发现不执行的代码也会影响会执行的代码,因为var
的时候, a
会提升到if语句
的前面
undefined可以翻译为不明确 而not defined可以翻译为未定义
Java
中变量的分为全局变量
(成员变量)或者局部变量
JavaScript
中:var
定义的变量其它方法可以共享var
定义的变量只有该方法内生效。代码演示
{let a = 1}
console.log(a) // undefined
const
的特性和let
完全一样,有三点区别:const a
编译器报错:
const variable wwithout initializer is not allowed
控制台报错:
SyntaxError: Missing initializer in const declaration
const a=1
a=2
编译器报错:
const a=1;
a=2;
console.log(a)//编译器内报错信息:Attempt to assign to const or readonly variable
控制台报错:
TypeError: Assignment to constant variable.
const a =2
const a=1
SyntaxError: Identifier 'b' has already been declared
for (let i = 0; i < 5; i++) {
console.log(i)
}
上面的代码我们知道打印结果是 0, 1, 2, 3, 4,但是你们有没有想过这个变量i的作用域到底是什么呢?
有人说在这个for循环里呀,但是我这里想说的是这个i作用域是在括号()里。
正常的代码是这样的:
1.首先这个变量_i的作用域是在()里才有效的,循环体里是不能访问到_i的
2.每次循环的时候创建一个i变量,将括号里的_i赋值到变量i上
3.最后i++后再将变量i的值赋值回_i上
当然这个过程是很复杂的,可以用下面代码理解,但是JS的实现机制是很复杂的,这里想要说明的let i的作用域有时候并不是我们所理解的那样的。
for (let _i = 0; i < 5; i++) {
let i = _i
console.log(i)
// i++ 先做
_i = i
}
作者:听说你混的不错
链接:http://www.qianduanheidong.com/blog/article/33538/f4ad2427d1fd1c050ad5/
来源:前端黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 前端黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-3
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!