当前位置:首页 > 编程笔记 > 正文
已解决

JavaScript系列从入门到精通系列第十八篇:JavaScript中的函数作用域

来自网友在路上 145845提问 提问时间:2023-10-07 23:29:51阅读次数: 45

最佳答案 问答题库458位专家为你答疑解惑

文章目录

前言

一:函数作用域


前言

        我们刚才提到了,在<Script>标签当中进行定义的变量、对象、函数对象都属于全局作用域,全局作用域在页面打开的时候生效在页面关闭的时候失效。

一:函数作用域

        调用函数时创建函数作用域,函数执行完毕之后作用域销毁。

        没调用一次函数就会生成一个新的函数作用域。

var a = 10;function fun(){console.log(a);//10
}

        函数作用域是局部的,在函数作用域当中可以访问到全局作用域的变量。

function fun(){var b = 10;console.log(b);
}console.log(b);//这里会报错。

        这样写就有问题了,全局无法访问局部的内容。

var a = 100;function fun(){var a = 10;console.log(a);//10
}console.log(a);//100

        当我们在函数作用域当中操作一个变量时,会先在自身作用域当中进行寻找。如果没有就前往上一级进行寻找。

        上一级不一定是全局哦。函数里边嵌套函数的这种情况,里边的函数的上一级就是外层函数的作用域。

function fun(){var a = 100;var b = 10;function fun2 (){console.log(a);}}

        层层往上级进行寻找如果还是没有的话,就该报错了。如果想在函数中想访问全局的,在变量名字前添加window就行了。

        在函数作用域当中使用var声明的变量也有一个声明提前的作用:

function fun(){console.log(a);//undefinedvar a = 35;
}fun();

        也就是在函数声明也会在函数中所有的代码执行之前被声明,但是没有赋值。

var c = 35;
function fun(){console.log(c);//35
}
fun();

        但是如果是这样则另当别论了:

var c = 10;function fun(){console.log(10);//undefinedvar c = 20;
}fun();

        这个打印的结果最终是undefined,因为同样的变量C有去全全局的有函数作用域的肯定使用函数作用域的,函数作用域的基于var声明的会被提前但是不被赋值。所以打印的是undefined。

        那么如果不使用var呢?

var c = 35;function fun(){console.log(10);c = 100;
}

        这个用C的时候找不到就往上级去找,然后最终打印的记过是35

function fun(){d = 100;
}console.log(d);//100

        在函数中不使用var修饰的话,会被声明为全局变量。

var e = 23;function fun(e){alert(e);
}fun();

        定义了形参就相当于在函数当中基于var声明了变量

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"JavaScript系列从入门到精通系列第十八篇:JavaScript中的函数作用域":http://eshow365.cn/6-17003-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!