资讯专栏INFORMATION COLUMN

关于JavaScript变量提升方面需要注意的地方

youkede / 1554人阅读

摘要:与大家分享一下本文适合对于变量提升存疑的小伙伴们查看。下列代码输出结果正确的是毫无疑问这道题涉及到了变量提升。就是答案的第一项对于那些不太熟悉变量提升的人们很容易就会选错,毕竟函数外部定义一个变量,函数内输出值,没什么问题。

最近看到一道某手机公司的校招前端笔试题,感觉很有意思。与大家分享一下
本文适合对于变量提升存疑的小伙伴们查看。

下列代码输出结果正确的是:()

var val = 12;
function fun1(){
   console. log(val);
   var val = 20;
   console.log(val);
}
fun1();

A.12 20

B.12 12

C.undefined 20

D.20 undefined

毫无疑问这道题涉及到了变量提升。答案的第二项是20应该是没有争议的,相当于

var val=20;
console.log(val);

定义一个变量,再输出。
就是答案的第一项对于那些不太熟悉变量提升的人们很容易就会选错,毕竟

 var val = 12;
 function fun1(){
   console.log(val);//12
 }
 fun1();

函数外部定义一个变量,函数内输出值,没什么问题。
那如果题目是这样呢:
var val = 12;
function fun1(){

console.log(val);//12
val = 20;
console.log(val);//20

}
fun1();

函数外部定义一个变量,函数内部先输出得12再重新进行赋值,再次输出得20。
那么我们回到一开始的题目。
题目是这样

下列代码输出结果正确的是:()

var val = 12;
function fun1(){
   console. log(val);//undefined
   var val = 20;
   console.log(val);//20
}
fun1();

和上面比,不同的地方在于函数内部输出过一次后又重新定义并赋值,虽然只是多了个val,但结果就不一样了,他影响着第一个val的输出值。
为什么第一个输出值为underfined,
其实上面的代码等同于var val = 12;

function fun1(){
   var val;
   console. log(val);//undefined
   val = 20;
   console.log(val);//20
}
fun1();

由于函数内重新定义val,导致变量val被提升到了顶端,但它被赋予的值并没有提升,所以第一个console.log(val)输出的只是定义过但没有被赋值的val,第二个console.log输出的是被赋值20的val。
所以这道题的答案为C。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/103840.html

相关文章

  • [转载]jQuery插件开发详细教程

    摘要:本教程可能不是最精品的,但一定是最细致的。插件开发下面我们就来看第二种方式的插件开发。然后我们的插件代码在这个方法里面展开。 要说jQuery 最成功的地方,我认为是它的可扩展性吸引了众多开发者为其开发插件,从而建立起了一个生态系统。这好比大公司们争相做平台一样,得平台者得天下。苹果,微软,谷歌等巨头,都有各自的平台及生态圈。 学会使用jQuery并不难,因为它简单易学,并且相信你接触...

    kevin 评论0 收藏0
  • 前端优化-Javascript篇(3.标识符查找优化)

    摘要:下面我跟大家分享关于标识符查找方面的优化问题。这个变量对象会首先被放入作用域链中。执行上下文也有一个作用域链,这个作用域链就是用来进行变量查找的。当执行上下文创建时,它的作用域链会用函数的属性来初始化。   前面两篇文章介绍了Javascript文件在页面中位置以及异步加载问题对前端性能的影响。不过受限于单线程的原因,不管采用哪种方法,只要Javascript进行了耗时的工作,就都会引...

    KaltZK 评论0 收藏0
  • [翻译] JavaScript Scoping and Hoisting

    摘要:对于新手来说是最令人困惑的部分之一。函数声明通过的形式。很明显的,语言自身定义和函数形参已经处于作用域顶端。这就意味着,函数声明比变量声明具有更高的优先级。但是这却不意味着对这个名称的赋值无效,仅仅是声明的部分会被忽略而已。 原文链接:JavaScript Scoping and Hoisting 你知道下面的JavaScript代码执行后会alert出什么值吗? var foo = ...

    FingerLiu 评论0 收藏0
  • JS笔记四:作用域、变量(函数)提升

    摘要:变量作用域一个变量的作用域表示这个变量存在的上下文。在这种情况下,仅仅函数声明的函数体被提升到顶部。虽然我们无需用来修饰形式参数,但是形式参数的确也是变量,并且被自动提升到次高的优先级函数声明。 关于作用域,变量提升,函数提升的个人理解 参考: 阮一峰的JavaScript参考教程2.7函数部分 思否上一篇关于作用域,提升的博客 一篇关于作用域和提升的个人博客 MockingBird...

    FuisonDesign 评论0 收藏0
  • JavaScript函数(二)

    摘要:目录函数的声明函数的属性和方法函数的作用域闭包知识点小结关于函数,可以从以下个方面去理解首先,数据类型上看函数在中是一种数据类型,是对象的一种其次,从功能上看函数本质上是一段反复调用的代码块最后,从地位上看函数在中和其他基本数据类型一样,可 目录 1.函数的声明 2.函数的属性和方法 3.函数的作用域 4.闭包知识点 5.小结 关于函数,可以从以下3个方面去理解:首先,数据类型上看:...

    用户84 评论0 收藏0

发表评论

0条评论

youkede

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<