javascript关于变量作用域

来源:互联网 发布:网络攻防实验系统 编辑:程序博客网 时间:2024/06/05 10:58

【1】当全局变量传参数进入函数

<script type="text/javascript">var color_first='blue'function change_color(obj){obj='red';return obj;}var color_second;color_second=change_color(color_first);alert(color_first);//输出:bluealert(color_second)//输出: red</script>
当变量作为全局变量时,传参数进入函数,在函数内的操作并不改color_first变量本身;
_______________________________________________________________________________________________________

当然有小伙伴说,我就想懒一点,不需要返回值就改变color_first变量,可以如下实现
<script type="text/javascript">var color_first='blue'function change_color(){color_first='red';}change_color();alert(color_first);//输出:red</script>
以上调用了函数,但是没有将color_first以参数的形式直接在函数中调用,因为first_color相对于change_color()函数为全局变量,所以直接调用;
_______________________________________________________________________________________________________

当然当变量定义在函数内的时也就成为了局部变量即不可以在全局的区域调用,代码如下
<script type="text/javascript">function change_color(){var color_second='red';alert(color_second)//输出red}change_color();alert(color_second);//该处会报错</script>

【2】变量前是否加var的区别

当定义变量时常规的做法是加var
<script type="text/javascript">function change_color(){var color_second='red';alert(color_second)//输出red}change_color();alert(color_second);//该处会报错</script>
在第二处alert检测会报错,因为在第二处变量color_second被定义为局部变量,所以在函数外color_second并不能被检测到;
_______________________________________________________________________________________________________

但是怎么样可以让变量在函数中定义依然可以在全局中使用呢,当变量定义去掉var就能达到该效果
<script type="text/javascript">function change_color(){color_second='red';alert(color_second)//输出red}change_color();alert(color_second);//输出red</script>
当去掉var时,color_second与此同时也就成为了全局变量,所以在第二个alert处可以检测到并输出;
—————————————————————————————————————————————————————————
但是在js编程中有一种神奇的模式叫做严格模式,当未用var定义变量会报错
<script type="text/javascript">'use strict'function change_color(){color_second='red';//该处报错alert(color_second)//出错}change_color();alert(color_second);//出错</script>
可能有些点没有说到,欢迎评论补充;