资讯专栏INFORMATION COLUMN

前端面试你所不知道系列

Julylovin / 1993人阅读

摘要:请注意是创建一个全局对象的属性,而不是声明了一个全局变量。由于变量声明自带不可删除属性,比较跟,前者是变量声明,带不可删除属性,因此无法被删除后者为全局变量的一个属性,因此可以从全局变量中删除。下期预告前端面试你所不知道系列伪类和伪元素

写在开始

又到了一年的伊始,很多人可能因为各种原因想换一份工作,而找工作难免遇到各种各样头痛的面试题,于是我打算写一个系列,关于面试中最常见或者前端一些基础但又不是很深入了解的知识,供大家参考。

先来道开胃菜 var还是不var?

使用var定义

var a = "hello World"
function bb(){
 var a = "hello Tom";
    console.log(a);   
}
bb()   
console.log(a);    

不使用var定义

var e = "hello world";
function cc(){
    e = "hello Tom";
    console.log(e);
}
cc()   
console.log(e)    

猜猜会执行什么?

其实很简单,使用var先后打印// "hello Tom" // "hello world",

不使用var先后打印// "hello Tom" // "hello Tom"

大家都知道Javascript声明变量是通过关键字var。使用var关键字是在当前域中声明变量,如果在方法中声明,则为局部变量(local varibble);如果在全局域中声明,则为全局变量。

但在非严格模式下,不通过var直接声明变量,则是全局变量,好像也不会报错,例如a = 1 console.log(a) // 1,但这样真的没问题吗?那么执行a = 1; 发生了什么呢?

它会尝试在当前作用域链(如果是在方法中,则当前作用域链代表全局和方法局部作用域)中解析a;如果在任何当前作用域找到a;则会对a属性赋值;如果没有找到a,它会在全局对象(当前作用域最顶层,如window对象)中创造a属性并赋值。

请注意!!!是创建一个全局对象的属性,而不是声明了一个全局变量。

或许你可能不是很明白‘声明变量’和‘创建对象属性’有什么区别。但事实上,Javascript 的变量声明、创建属性都有一定的标志去声明他们的属性如:只读(ReadOnly)不可枚举(DontEnum)不可删除(DontDelete)等等。

由于‘变量声明’自带不可删除属性,比较var a = 1 跟 a = 1,前者是变量声明,带不可删除属性,因此无法被删除;后者为全局变量的一个属性,因此可以从全局变量中删除。

    var a = 1
    b = 2
    console.log(delete a) // false
    console.log(delete b) // true
变量提升

使用var定义:

function hh(){
    console.log(a);
    var a = "hello world";
}
hh()    //undefined

不使用var定义:

function hh(){
    console.log(a);
    a = "hello world";
}
hh()    // "a is not defined"

还有一点很容易被忽略,在ES5的"use strict"模式下,如果变量没有使用var定义,就会报错。
这也是一个差别。

总结

1.在函数作用域内 加var定义的变量是局部变量,不加var定义的就成了全局变量。

2.在全局作用域下,使用var定义的变量不可以delete,没有var 定义的变量可以delete。

3.使用var 定义变量还会提升变量声明。

4.在ES5的"use strict"模式下,如果变量没有使用var定义,就会报错。

写在最后

由于个人能力有限,如果文中出现任何错误,欢迎各位大神提出批评和建议,这是鄙人首次发表技术性文章,希望大家多多支持。

下期预告:前端面试你所不知道系列--伪类和伪元素

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

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

相关文章

  • 一些所不知道的VS Code插件

    摘要:摘要你所不知道的系列。允许你写入缩写代码并返回的相应标记,目前已经内置,所以不用配置了。自从年双十一正式上线,累计处理了亿错误事件,付费客户有金山软件百姓网等众多品牌企业。摘要: 你所不知道的系列。 原文:提高 JavaScript 开发效率的高级 VSCode 扩展之二! 作者:前端小智 Fundebug经授权转载,版权归原作者所有。 作为一名业余爱好者、专业人员,甚至是每月只有一次编...

    Near_Li 评论0 收藏0
  • 练就Java24章真经—所不知道的工厂方法

    摘要:用专业的话来讲设计模式是一套被反复使用多数人知晓的经过分类编目的代码设计经验的总结创建型模式,共五种工厂方法模式抽象工厂模式单例模式建造者模式原型模式。工厂方法模式的扩展性非常优秀。工厂方法模式是典型的解耦框架。 前言 最近一直在Java方向奋斗《终于,我还是下决心学Java后台了》,今天抽空开始学习Java的设计模式了。计划有时间就去学习,你这么有时间,还不来一起上车吗? 之所以要学...

    Chiclaim 评论0 收藏0
  • 【好好面试】学完Aop,连动态代理的原理都不懂?

    摘要:总结动态代理的相关原理已经讲解完毕,接下来让我们回答以下几个思考题。 【干货点】 此处是【好好面试】系列文的第12篇文章。文章目标主要是通过原理剖析的方式解答Aop动态代理的面试热点问题,通过一步步提出问题和了解原理的方式,我们可以记得更深更牢,进而解决被面试官卡住喉咙的情况。问题如下 SpringBoot默认代理类型是什么 为什么不用静态代理 JDK动态代理原理 CGLIB动态代理...

    Keven 评论0 收藏0
  • 面试必考之http状态码有哪些

    摘要:背景状态码有哪些,这也是一个很高频的面试问题。总结仅仅三个状态码,都可以牵涉到如此丰富的知识,对于状态码,我们不能只是片面的去背诵状态码及对应的含义,要去主动挖掘,深入,借助状态码来建立自己的网络体系。 背景 http状态码有哪些,这也是一个很高频的面试问题。一般大家都知道404页面不存在,500服务器错误,301重定向,302临时重定向,200ok,401未授权啥的。 如果只是简单的...

    wing324 评论0 收藏0

发表评论

0条评论

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