js-----初步了解变量 作用域
来源:互联网 发布:新疆知信科技有限公司 编辑:程序博客网 时间:2024/06/06 02:26
变量的声明用var
//显式声明(var i = 100;)
1. 全局变量:在函数外通过var声明的变量。
2. 局部变量:在函数中通过var声明的变量。
//隐式声明(i = 100;)
没有声明就使用的变量,不管在这句话在哪里,都是默认全局变量的赋值
【一】
<script> a = 1;//默认就是全局变量 function t(){ var b = 5; a = 6;//相当于window.a重新赋值为6 污染全局变量 alert(a+b);//11 } t(); alert(a);//最终输出的是6 alert(c);// c is not defined js会报错 </script>
在函数中使用var关键字进行显式声明的变量是做为局部变量,而没有用var关键字,使用直接赋值方式声明的是全局变量。
当我们使用访问一个没有声明的变量时,JS会报错。而当我们给一个没有声明的变量赋值时,JS不会报错,相反它会认为我们是要隐式申明一个全局变量,这一点一定要注意。
变量的作用域
js中函数嵌套比较普遍
变量的查找是就近原则,去寻找var定义的变量,当就近没有找到的时候就去查找外层。
- 首先在函数内找
- 如果找不到 去外层寻找 直到全局window区域
- 不会向内寻找
这个就是函数嵌套的简单例子—看看你能说出正确结果吗?
【二】
<script> var c = 5; function t1(){ var d = 6; function t2(){ var e = 7; var d = 3; alert(c+d+e); } t2(); }t1();</script>
对比两个例子
【三】
<script>var str1 = "global";//全局变量function test(){ console.log(str1);//函数内没有str1 就一层层向外访问 global console.log(str2);//这里会报错str2 is not defined str2 = "local";//这里赋值 隐式声明为全局变量 }test();</script>
在test()函数内寻找str1—没有 又在window寻找 str1 有global
在test()函数内寻找str2—没有 ,又在window寻找 str2 is not defined错误(当我们使用访问一个没有声明的变量时,JS会报错)
【四】
<script>var str1 = "global";function test(){ console.log(str1);//window.str1 = global console.log(str2);//这里是未定义 undefined 不是报错 var str2 = "local";//在函数内声明了 console.log(str2);//这里就可以输出local}test(); console.log(str2);//这里的str2默认是全局的,它不会向内寻找,//str2 is not defined错误</script>
js代码自上而下 执行;
但是js代码的整体运行 分为词法分析期 和 运行期。
自上而下没有问题 先有一个词法分析过程 很重要。
先分析 test函数 test() {var str2;} 分析出 test函数内有局部变量 .但是函数未运行,所以str2 是undefined.然后 执行test.所以 str2 undefined,之后赋值str2 = local.然后str2 是local。但是全局的str2仍然是is not defined 出错
最后再看一个很短的代码
【五】
//声明两个全局变量window m nalert(window.m);//undefinedalert(window.n);//undefinedfunction t(){ m = 99;//相当于给全局变量赋值 var n = 66;//声明函数内局部变量}t();alert(window.m);//99alert(window.n);//undefined
第一次写博客,也不知道咋写,就简简单单写一下js中局部全局变量已经作用域吧,可能写的也比较乱,思路不是很清晰,慢慢学习。还望大佬多给意见,谢谢你读完这一篇博客!
阅读全文
1 0
- js-----初步了解变量 作用域
- js 变量作用域
- js变量作用域
- js变量作用域
- js变量作用域
- js 变量作用域
- JS变量作用域
- js变量的作用域
- 变量的作用域js
- JS。某变量作用域。
- js的变量作用域
- js变量作用域链
- js变量的作用域
- js 变量的作用域
- js变量作用域问题
- js变量作用域总结
- js的变量作用域
- js变量和作用域
- linux cat命令的<<EOF
- yii2下使用自带类发送邮件
- springboot(1):入门篇
- 用fread()和fwrite()读写文件
- [zabbix/使用API进行批量创建screen(聚合图形)]
- js-----初步了解变量 作用域
- 二、读java编程思想五到七章
- 欢迎使用CSDN-markdown编辑器
- java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11GraphicsEnvironment
- 刚学的类与对象的思想(不知道对不对,求大神指导)
- MySQL学习笔记
- Android Room联合AsyncListUtil实现RecyclerView分页加载ORM数据
- yii2中分页的样式设置
- ffplay播放器音视频同步原理