即使是前端大神有时候也会被一些小埋伏给打趴下,即时防患于未然才是王道,今天小千就来给大家介绍几个JS变量设置中的小埋伏,拿好小本本。

使用var关键字声明的变量即显式声明变量:如:var abc1 = ‘hello’

js允许不使用var声明变量即隐式声明变量:如:abc2 = ‘world’

那么,问题来了,这两种变量有什么不一样的地方吗?

1.如果abc1和abc2 都在全局作用域,在浏览器控制台打印window对象:console.log( window )

如下图:

上图可以看到:在全局的变量abc1和abc2都是window对象的属性,都拥有全局作用域。

2.如果abc1和abc2都在函数作用域,在浏览器控制台打印window对象?

如下图:

上图可以看到:在函数作用域中abc1不会出现在window对象中,是一个局部变量;而abc2依然是window对象的属性,拥有全局作用域。

3.如果abc1和abc2 都在全局作用域,都是window对象的属性,它们是否可以如对象属性一般可以被删除呢?

如下图:

上图可以看到:使用var声明的变量abc1并没有被删除,依然是window对象的属性;而不使用var声明的变量abc2已被删除掉。

为什么会有这样的差别呢?

这与默认的对象属性描述符有关!

如下图:

上图可以看到:window对象的属性abc1的描述符中,configurable: false 表示该属性不可配置、不可删除。

如下图:

上图可以看到:window对象的属性abc2的描述符中,configurable: true 表示该属性可配置、可删除。

正是对象属性描述符中的默认设置不一样,导致了是否可删除的差异!

在js中变量声明和函数声明会出现‘声明提升’,js引擎解析执行代码时分为两个阶段:1.预解析阶段;2.逐行执行阶段。

在预解析阶段变量abc1被声明并赋初始值为undefined;在逐行执行阶段变量abc1被赋值为‘hello’;所以,在变量声明之前打印不会报错,打印的值为undefined。

本文来自千锋教育:http://www.mobiletrain.org/

JS变量中你不知道的小埋伏相关推荐

  1. 《变量》精髓:慢变量造就时代进步大趋势, 在慢变量中找到小趋势,能坚定我们前进的信心

    <变量>书中的精髓:慢变量造就时代进步大趋势, 在慢变量中找到小趋势,能坚定我们前进的信心 心理学上,有一个著名的实验,叫"看不见的大猩猩".这个实验是这样的:参加测试 ...

  2. js中变量作用域的小理解

    一:变量作用域 在js代码中每个变量都是有自己的作用域的,js中不像C语言有块级作用域的概念,取而代之的是函数作用域,看如下代码: var scope="global"; func ...

  3. html img调用js,html调用js变量 如何在html中输出js文件中的变量

    html页面代码中怎么调用js变量?html页面代码中怎么调用js变量,例如 在html代码中插入js代码: a=取浏览你把index1.js 中的onReady 去掉,把index1.js改成 fu ...

  4. jsf取js变量_JSF页面中的JS取得受管bean的数据(受管bean发送数据到页面)

    [问题]Asp.net MVC 的cshtml页面中调用JS方法传递字符串变量参数. [解决]直接对变量加引号,如: 删除- http://blog.csdn.net/xxjoy_777/articl ...

  5. js变量和java变量相等,js中变量和jsp中java代码中变量互相访问解决方案

    1.js变量获取jsp页面中java代码的变量值. 方法:var JS变量名 = 我们常常会将js文件和jsp文件分开写,在js文件中,上面的方法似乎不管用了. 也可以通过变通的方法来解决: a.js ...

  6. [js] 代码中如果遇到未定义的变量,会抛出异常吗?程序还会不会继续往下走?

    [js] 代码中如果遇到未定义的变量,会抛出异常吗?程序还会不会继续往下走? 在浏览器环境下JS 解析器解析到未定义变量时,会抛出 Uncaught ReferenceError 错误,JS 引擎会停 ...

  7. html自定义js程序,JS中微信小程序自定义底部弹出框

    实现微信小程序底部弹出框效果,代码分为html,css和js两部分,具体代码详情大家参考下本文. html CSS .commodity_screen { width: 100%; height: 1 ...

  8. 外部js php变量,在外部JS文件中包含PHP变量?

    我的解决方案结合了几种技术,其中一些已经在这个问题的答案中提到过. 是的,将PHP与JS分开 首先:是的,你应该将你的JS与PHP分开.您可以将其放在单独的文件中,但是您需要对当前代码进行一些更改.不 ...

  9. php声明js变量类型,js中变量是什么以及有哪些类型

    在js中,变量是存储信息的容器:JavaScript中有两种类型的变量:局部变量和全局变量. js如何声明变量? 在js中,可以使用关键词"var"或者"let" ...

最新文章

  1. 华为云免费体验 怎么使用_华为云Classroom免费向全国高校开放,云端学习更高效...
  2. python【数据结构与算法】动态规划详解从背包到最长公共子序列(看不懂你来打我)
  3. 数据结构读书笔记(三)(C语言)
  4. hibernate mysql id 自增长 注解_hibernate Mysql 自增长 注解配置,表无关联的注解方式关联查询...
  5. 以“百钱买百鸡”问题练习使用 C语言 goto 语句
  6. java用JDBC连接数据库的方式
  7. 如何在xshell中查看某一接口的服务_【干货分享】如何使用远程工具进入Linux系统...
  8. Java进阶(二十九)集合12:集合练习题
  9. SQL语句的基础教程(一)
  10. 傻X了:mac上编译的程序放到linux上运行
  11. 未能联接game center服务器,win10系统GameCenter无法连接服务器的处理步骤
  12. 《异常点检测》 - 第十章阅读记录 - 离散序列的异常点检测
  13. CentOS离线 + 在线安装telnet(rpm包安装)
  14. 想一想就感觉到生活还是充满很多正能量的
  15. 2022-2028年中国桌面云产业发展动态及市场需求预测报告
  16. c语言求逆程序,求逆矩阵的C语言源程序CINV
  17. 美美征婚 阿米托佛(*^__^*)
  18. 仿联想商城laravel实战---3、前端页面搭建(什么情况下需要路由接参数)
  19. 基于SSH的客车网上售票系统的设计与实现
  20. python图灵机器人微信号_个人微信接入图灵机器人(基于Python)

热门文章

  1. Mysql学习总结(40)——MySql之Select用法汇总
  2. celery java_Python的Java Celery项目相当于什么?
  3. python网页部署-想用python3做web开发的一些不知(主要是环境部署),求解!
  4. canvas画条形图 微信小程序_小程序-引入 echart 图表画圆饼图
  5. trunk vlan 加路由
  6. 如何在Ubuntu中修改默认程序
  7. Knockout事件传递参数的几种方式
  8. C语言 strftime 格式化显示日期时间 时间戳
  9. DNS服务系列之二:DNS区域传送漏洞的安全案例
  10. aptana 代码折行