<script> function display(){ //var i=20; //局部变量只在局部作用域起作用 i=20; //全局的,会将全局i的值修改为20 } display(); alert(i); </script>
在函数内部定义的就是局部的,否则就是全局的
如果函数内的变量没有var声明会直接影响全局的
为什么没有var是全局的?
是因为,在js中,如果某个变量没有var声明,会自动到上一层作用域中去找这个变量的声明语句,如果找到,就使用,如果没有找到,继续向上查找,一直查找到全局作用域为止,如果全局中仍然没有这个变量的声明语句,那么会自动在全局作用域进行声明,这个就是js中的作用域链
代码示例:
<script> var i=10; function fn1(){ var i=100; function fn2(){ i=1000; function fn3(){ i=10000; } fn3(); console.log(i);//10000 } fn2(); console.log(i);//10000 } fn1(); console.log(i);//10 </script>
局部访问全局使用作用域链
全局访问局部可以使用(函数)闭包进行模拟.
五、arugments的使用
在一个函数内部,可以使用arguments属性,它表示函数的的形参列表,它是以数组形式体现的
例1:在定义display函数时,它的实参个数必须要与形参个数保持一致,有时,我们定义函数时,形参数目不能固定,如何解决?
<script> function display(){ //没有定义形参,那么所有形参会自动存放到arguments这个属性数组中 for(var i=0;i<arguments.length;i++){ document.write(arguments[i]+'<br>'); } } display('lisi','zhangsan','wangwu'); //三个实参 display('zhangsan','lisi','wangwu','xiaoqiang','wangcai'); //五个实参 </script>
如果定义时,参数个数不确定,可以通过arguments来保存所有实参
例2:使用js函数来计算每个公司的员工工资总额
<script> function display(){ var sum=0; //总额 for(var i=0;i<arguments.length;i++){ sum+=arguments[i]; } document.write(sum+'<br>'); } //A公司 display(10000,2000,5000); //B公司 display(1000,2000,5000,8000,10000); </script>
以上就是javascript教程的全部内容,希望对大家的学习有所帮助。
您可能感兴趣的文章: