Web前端面试笔试题2——JS(1):函数调用(局部变量/全局变量)
来源:互联网 发布:淘宝面膜排行榜 编辑:程序博客网 时间:2024/06/04 19:46
1、函数调用——局部变量/全局变量
案例1-1:fun(a)函数有传参,即可更改“局部变量”
var a=100;function fun(a){ a++; console.log(a);}fun(100);//101;console.log(a);//100
解析:在上述案例中,由于函数fun()中传入参数“a”,所以a=100,进行了函数赋值,“a++”之后,a由“100”变成了“101”;再经过“fun(a)”,输出“101”,fun(100)返回“101”。
但是,对于fun(a)而言,“a++”后“a=101”,作为一个局部变量,在程序执行完毕就被销毁,所以在外部函数而言,“a= ”全局变量“a(100)”,所以“console.log(a)”,输出“100”。
window
a100fun(函数对象)console.log(a)
拓展——
如果将函数fun(a)改为“fun()”,表示函数没有局部变量,即设置了“无参”模式,自身没有传递“局部变量”,所以经过“a++”之后,更改完即更改全局变量。
案例1-2:fun()没有传递参数,即为“全局变量”
var a=100;function fun(){ a++; console.log(a);}fun(100); //101console.log(a); //101
解析:
在上述案例中,唯一不同的就是“fun(a)”改为“fun()”,即“fun()”不传入参数,里边的参数即为传递“全局变量”,所以“a++”之后,更改的是“全局变量a”;
但是,案例1-1中“fun(a)”中,即“fun(a)”传入参数,里边的参数即为传递“局部变量”,当函数fun()执行完毕后,局部变量即刻销毁,所以“console.log(a)”还是“全局变量”,这亦是两个案例的不同之处所在。
2、给未声明的变量赋值,系统会自动定义声明
案例2-1:
var n=101;function foo(){ m=100; console.log(m);}foo(); //100console.log(m); //100
解析:在上述案例中,由于“fun()”表示“无主语”状态,即表示全局变量,所说外部仅有全局变量“n”,但是在fun()函数中,“m=100”,变量声明,所说外部仅定义全局变量“n”,并未定义“m”。但是,系统会自动定义“m”,此时“m”为“全局变量”。
案例2-2:
function foo(m){ m=100; console.log(m);}foo(); //100console.log(m); //会报错!
解析:在上述案例中,与“案例2-1”不同的是。foo(m)传入了参数“m”,此时“m”不再是“foo()”中的为“全局变量”,此时是“局部变量”。
根据局部变量特点“执行完毕即被销毁”,所以,执行完“foo()”函数后,局部变量“m”即刻消失,所以“console.log(m)”即会报错!
总结——
(1)若函数传递参数,如“fun(a)”,此时函数内部“a”,即为局部变量,外部为“全局变量”。
(2)局部变量“a”仅在局部函数“fun(a)”调用执行时被使用,执行完毕后,局部变量“a”将被销毁。
(3)若在函数fun()未传递参数,即为“全局变量”。若声明了未被定义的变量,此时的变量系统会自动定义该变量,为“全局变量”。
(4)若在函数fun()中传递参数fun(m),此时只执行函数内部,执行完毕即销毁,“console.log(m)”将会报错显示。
3、局部变量+全局变量“混合”
案例3-1:
var a=100;function fun(){ console.log(a); var a=90; console.log(a);}fun();//undefined 90console.log(a); //100
解析:
由于在局部变量中,并未定义变量“a”,所以此时a为“未定义undefined”状态;
后来又重新赋值“90”,此时函数输出“90”,“a=90”作为“局部变量”,执行完毕即被销毁。
但是,外部全局变量并不会改变,还是“a=100”。
案例3-2:
var a=100;function fun(){ console.log(a); a=90; console.log(a);}fun();//100 90console.log(a); //90
由于与“案例3-1”相比,“var a=90”取消了“var”,此时“无var,有赋值”,“a”为全局变量二次赋值,此时“a=90”。
但是,起始的“a=100”由于重新赋值,所以“a=90”
4、函数重复声明、调用
function foo(){ return 1;}console.log(foo()); //1function foo(){ trturn 2;}console.log(foo()); //2var foo=100;console.log(foo()); //“出错”
解析:
由于上述案例中,前两个均为“声明提前”,但是第三个中,声明“var foo=100”,此时的foo为一个变量,而不是一个函数类型,所以当“console.log(foo())”时,会出错。
0 0
- Web前端面试笔试题2——JS(1):函数调用(局部变量/全局变量)
- 面试笔试题(2)
- C++——static关键字(全局变量,局部变量,函数)
- 前端面试笔试题
- 前端面试笔试题
- 前端面试笔试题
- Web前端面试笔试题——null和undefined有什么区别么?
- static--修饰(局部变量、全局变量、函数)
- 2017深圳web前端开发面试笔试题
- Web前端从入门到放弃(js全局变量、局部变量、闭包)
- web前端面试题——1
- WEB 前端面试题(1)
- 遇到的一个面试题:编写一个strlen函数,不能使用全局变量或者局部变量
- js局部变量/全局变量
- js局部变量 全局变量
- 面试题之JavaScript 的全局变量与局部变量
- 前端小白路--JS中的全局变量和局部变量
- js---局部变量和全局变量(2)
- HTML5+CSS基础
- 杭电oj(Java版)——1713 相遇周期
- 个人模板 简单离散化
- Android基础之Json解析(上)
- 删除排序数组中的重复数字 II
- Web前端面试笔试题2——JS(1):函数调用(局部变量/全局变量)
- 函数的理解
- 有些应用软件进行系统调用时,为了一些场景更好的实现最优的表现,因此需要调整操作系统参数:
- java中输入输出流的知识总结 以及小例子程序
- vim在同一行,首尾切换
- 盈隆-顺势入场
- 【codevs 1043】方格取数
- Softmax公式推导
- Codeforces140C