为什么JavaScript声明变量的时候鼓励加var关键字
在JavaScript中,var用来声明变量,但是这个语法并不严格要求,很多时修改,我们可以直接使用一个变量而不用var声明它。
- var x = "XX";
- y ="xxx";
var x = "XX";
y ="xxx";
诸如此类。这有一个问题,比如说在代码中的某一行,我想使用的一个已声明的变量x,结果由于打字或者拼写错误,这个变量被写成y了,结果相当于“隐式”声明了一个变量y,在实际编程过程中,这种错误有时比较难以发现。
当你在当前上下文内进行这种“隐式”声明时,JavaScript引擎会先在当前上下文中寻找是否之前有声明此变量,如果没有,再到上一级的上下文中去寻找,如果一直未找到,会最后在window上声明这个变量!
比如:
window. y = "hello";
function func(){
y = "OH, NO!!!";
}
func();
alert(window.y); //#=> display "OH, NO!!!"
当上下文中的任意一层有这种“隐式”定义的变量时,那么该层的该变量会被修改,而不会在window上生成一个新的变量。(这种bug也挺讨厌的,尤其是封装的比较复杂的代码)
比如:
var x = "window.x";
function a() {
var x = "a's x";
var b = function() {
var c = function() {
//no var!
x = "c's x:";
};
alert("before c run,the b.x:" + x);
c();
alert("after c run, the b.x:" + x);
};
alert("a.x is:" + x);
b();
alert("after b function runed, the a.x is:" + x);
};
alert("before a run, window.x:" + x);
a();
alert("after a run, window.x:" + x);
这里面有以下几层:window, func a, func b, func c一直作层级嵌套。window->a->b->c
window和a中,都有定义变量x,b中未定义该变量,在c中‘隐式'声明了一个x,该x最终修改了a变量的值。
牢记,在JavaScript中,声明变量,一定前面要加var .
转载于:https://www.cnblogs.com/ranran/p/4000129.html
为什么JavaScript声明变量的时候鼓励加var关键字相关推荐
- JavaScript声明变量详解
前言 如果文章中有出现纰漏.错误之处,还请看到的小伙伴多多指教,先行谢过 在ES5阶段,JavaScript 使用 var 和 function 来声明变量, ES6 中又添加了let.const.i ...
- javascript 声明变量var、let、const详解及示例
1. var.let.const概述 ES6发布前,Javascript只能通过var声明变量的方式,常量.块级变量.函数变量这些概念的差别都不能很好的体现出来,于此同时,加入你要使用或者提供一个ap ...
- php 类static引用函数吗,php中在变量和函数前加static关键字之后的区别
static全局变量和普通全局变量,static局部变量和普通局部变量,static函数与普通函数的区别?下面本文将一一为你解答. (1)全局变量(外部变量)的说明之前再冠以static 就构成了静态 ...
- Javascript——声明提升(函数、变量提升)
文章目录 一. 声明提升 1.1 示例讲解(变量提升) 1.2 示例讲解(函数提升) 二.解决方案 2.1 使用赋值 详解 三.exercise 一. 声明提升 声明提升是JavaScript中的一个 ...
- 2 javascript视频教程 变量和数据类型
参考书<JavaScript从入门到精通> 当然,最权威的还是犀牛书<javascript权威指南>这个就当字典吧.不适合初学者. 返回知识列表:JavaScript知识列表 ...
- var let const声明变量的区别
在js中定义变量的方式有三种,其中let和const关键字是来自ES6中的,下面将逐一介绍各个关键字声明变量的特点. var声明变量 var 是一个 JS关键字,用来声明变量( variable 变量 ...
- php变量和js变量的区别吗,JS声明变量的3种方式和区别
JavaScript 是弱类型语言,可以不需要声明变量而直接使用.这样虽然简单但不易发现变量名方面的错误,所以不建议这样做.通常的做法是在使用 JavaScript 变量前先声明变量.目前,JavaS ...
- Javascript 声明时用“var”跟不用var的区别
Javascript声明变量的时候,虽然用var关键字声明和不用关键字声明,很多时候运行并没有问题,但是这两种方式还是有区别的.可以正常运行的代码并不代表是合适的代码. var num = 1: 是在 ...
- Javascript 私有变量
转自Javascript高级程序设计(第三版): 任何在函数中定义的变量,都可以认为是私有变量,因为不能在函数的外部访问这些变量.私有变量包括函数的参数,局部变量以及在函数内部定义的其他函数. 如果在 ...
- ES6Let简介 使用Let声明变量好处
使用Let声明变量 ES6不仅引入了let关键字用于解决变量声明的问题,同时引入了块级作用域的概念. 块级作用域: 代码执行时遇到花括号{会创建一个块级作用域.花括号}结束,销毁块级作用域. let ...
最新文章
- 3D车道线检测:Gen-LaneNet
- Java开发中最常犯的10个错误,你中招了吗?
- 如何正确的对待设计模式——我的观点
- mysql对执行结果进行html格式的输出?输出html格式?
- 动态链接库dll,静态链接库lib, 导入库lib 转
- C++ Primer 5th笔记(chap 16 模板和泛型编程)类模板成员函数的实例化
- 用c语言编写数码管的显示函数,各位大神,如何用C语言实现在数码管上实现1234同时亮...
- JavaSE各阶段练习题----Map
- SAP ABAP Netweaver里进程能够申请的最大内存
- java 刽子手游戏_java基础(九):容器
- WinForm 之 程序退出
- 华为云TaurusDB性能挑战赛-java赛题mvn编译时报错:不支持multi-catch
- 苏宁易购:全国1071万高考生可免费领取SUPER会员
- 前端人员必须掌握哪些技术?常见缓存种类有什么?
- php连贯操作,Thinkphp 3.2.3 sql的一些连贯操作方法
- 加密货币的寒冬如何破冰?
- Android给scrollView截图超过屏幕大小形成长图
- VirtualBox中,Windows虚拟机与主机共享文件夹不能用之一例
- 真随机数 c语言编程,C语言真正获取随机数
- 工业机器人的构成和分类