JavaScript中用var和不用var的区别】的更多相关文章

今天,被问到两个JS问题,当时没回答到重点,问题虽然看起来简单,但是细节却马虎不得,在此做下记录: 1. 在Javascript中 声明时用"var"与不用"var"的区别 Javascript声明变量时 var a = 111; 和 a = 111; 两种方式一样吗? var a = 11; function test4(){ var a = 22; } test4(); console.log(a); 结果是什么呢? 11 这个好理解, 函数内的var a声明是…
原文链接:http://www.2cto.com/kf/201204/128406.html[侵删]   Javascript声明变量的时候,虽然用var关键字声明和不用关键字声明,很多时候运行并没有问题,但是这两种方式还是有区别的   Javascript声明变量的时候,虽然用var关键字声明和不用关键字声明,很多时候运行并没有问题,但是这两种方式还是有区别的.可以正常运行的代码并不代表是合适的代码. var num = 1: 是在当前域中声明变量. 如果在方法中声明,则为局部变量(local…
var 声明的变量,作用域是当前 function 没有声明的变量,直接赋值的话, 会自动创建变量 ,但作用域是全局的. //----------------- function doSth() { a = "AAA"; } doSth(); // 执行一次 doSth alert(a); // 可以看到 "AAA" //----------------- 如果用了 var //----------------- function doSth() { var a =…
Javascript声明变量的,虽然用var关键字声明和不用关键字声明,很多时候运行并没有问题,但是这两种方式还是有区别的.可以正常运行的代码并不代表是合适的代码. varnum=1; 是在当前域中声明变量.如果在方法中声明,则为局部变量(localvariable),如果是在全局域中声明,则为全局变量. 而 num=1; 事实上是对属性赋值操作.首先,它会尝试在当前作用域链(如在方法中声明,则当前作用域链代表全局作用域和方法局部作用域etc...)中解析num,如果在任何当前作用域链中找到nu…
1.var 声明的变量,作用域是当前 function 2.没有声明的变量,直接赋值的话, 会自动创建变量,但作用域是全局的. 例如: function doSth() { a = "AAA"; } doSth(); // 执行一次 doSth alert(a); // 可以看到 "AAA" function doSth() { var a = "AAA"; } doSth(); // 执行一次 doSth alert(a); //出错!!! 变…
var num = 1: 是在当前域中声明变量. 如果在方法中声明,则为局部变量(local variable):如果是在全局域中声明,则为全局变量. 而 num = 1: 事实上是对属性赋值操作.…
http://www.cnblogs.com/juejiangWalter/p/5725220.html var num = 0;function start() {    num = 3;} 只要一运行start(),则num被创造为window全局对象的一个属性.(不是变量)…
没看之前千万别说我是标题党,这个问题真的有好多淫都不懂!!! 大家都看了很多文章,都说避免隐式声明全局变量,就是说声明变量前必须加'var',那加了'var'和不加'var'到底有啥区别呢? 先来看一段代码 var a = 'aa'; alert(a); //弹出 'aa' alert(window.a)//弹出'aa' 明白了吧,你声明一个全局变量其实是给'window'对象增加了一个属性,下面一段代码有相同效果 a = 'aa'; alert(a); //弹出 'aa' alert(wind…
JavaScript中变量声明有var和没var的区别 JavaScript中有var和没var的区别 Js中的变量声明的作用域是以函数为单位,所以我们经常见到避免全局变量污染的方法是 (function(){ // ... })(); 在函数内部,有var和没var声明的变量是不一样的.有var声明的是局部变量,没var的,声明的全局变量,所以可以借此向外暴露接口东东. 在全局作用域内声明变量时,有var 和没var看起来都一样,我们知道,声明的全局变量,就是window的属性,究竟是否一样,…
Javascript是遵循ECMAScript标准下的一个产物,自然ECMAScript的标准其要遵循. 先来看下var关键字的定义和用法 var 语句用于声明变量. JavaScript 变量的创建也叫作"声明"一变量: 复制代码代码如下: var carName; 变量声明后,变量为空 (没有值). 为变量复制,操作如下: 复制代码代码如下: carName = "Volvo"; 声明变量时,你同样可以为变量赋值: 复制代码代码如下: var carName =…
相信你对全局变量一定不陌生,在函数作用域里用a=1这种形式定义的变量会是一个全局变量,在全局作用域里,用下面3种形式都可以创建对全局可见的命名: <script> var a = 1; b = 2; window.c = 3; </script> 对于b=2这种方式, 它其实和c是一样的,在执行这个赋值语句的时候,会沿着作用域链寻找名字叫做b的变量,一直找到作用域链的顶端还没有找到,于是给window添加一个属性b然后赋值. var与不var有两个区别: 1 var的全局变量不能被…
2015/11/25补充: 关于变量声明这里有详细的解释: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/var 一个比较好的全面关于Javascript的文档说明. 推荐喜欢或正在学习Javascript的朋友每一个部分都 详细的看看. 之前很多模糊的概念都能在这里得到清晰的答案. /////////////////////////////////////////////////////…
Js中的变量声明的作用域是以函数为单位,所以我们经常见到避免全局变量污染的方法是 (function(){ // ... })(); 在函数内部,有var和没var声明的变量是不一样的.有var声明的是局部变量,没var的,声明的全局变量,所以可以借此向外暴露接口东东. 在全局作用域内声明变量时,有var 和没var看起来都一样,我们知道,声明的全局变量,就是window的属性,究竟是否一样,我们通过ECMAScrpit5提供的属性的特性查询方法,来发现之间的区别. var fff = 2; w…
前言 Javascript中的变量定义方式有以下三种方式:1.直接定义变量,var与let均不写: a = 10; 2.使用var关键字定义变量 var a = 10; 3.使用let关键字定义变量 let a = 10; 这三种方式有什么区别呢?JavaScript全局变量和局部变量又是什么呢?可以带着这两个问题往下看. 变量的作用域 变量是有作用域的,大多数语言中的变量的作用域都有全局变量和局部变量之分.首先我们建立一个文件test1.html,从中输入以下代码: <script type=…
前言 看了方应杭老师的一篇解释let的文章,对JavaScript中的声明有了深刻的理解,这里也就有了总结一下JavaScript中各种声明之间区别的这篇文章. JavaScript中变量声明机制 首先,我对JavaScript中所有声明都存在提升这个观点是认同的! 平时大家所讲的变量的声明,在JavaScript中一般是存在创建create.初始化initialize 和赋值assign三个过程的,其中函数声明也是一样有这三个过程的.在这三个过程中: 创建:即在变量所在作用于头部抛出变量,仅仅…
var 是js定义变量的意思. 由于js中的变量是弱类型的,因此js中的所有变量包括number(数字型).string(字符串类型).boolean(布尔类型,true和false)等均通过var关键字来定义. 那当我们不用var定义变量呢~ eg: var num1 = 1: num2 = 2: 请问num1和num2的区别是? 代码如上 浏览器控制台输出 用var 定义过的变量,是不能被删除的,是全局变量.(图中的num1) 没有被var定义的变量,是window对象的一个属性,是可以被删…
在全局作用域中声明变量加 var 关键字和不加 var ,js 引擎都会将这个变量声明为全局变量,在实际运行时,两种声明方式的变量的行为也是几乎一致的.但是在全局作用域下是否声明一个变量的 时候加var和不加var,其效果是否完全一致呢? 首先我们看在一个函数体内声明(局部作用域)变量,如下: // 变量声明不加 var function foo (a) { console.log(a + b) // b is not defined b = a } foo(2) [分析]执行 foo(2) 的…
JavaScript 拥有动态类型.这意味着相同的变量可用作不同的类型: var x // x 为 undefined var x = 6; // x 为数字 var x = "Bill"; // x 为字符串 var的作用:它控制了变量的作用范围.函数内的变量只要带有var,那么函数内用的这个变量就和函数外的无关. js中加“var”和不加“var”的区别: var num = 1: 是在当前域中声明变量. 如果在方法中声明,则为局部变量(local variable):如果是在全局…
let和const是 ES6 新增的命令,用于声明变量,这两个命令跟 ES5 的var有许多不同,并且let和const也有一些细微的不同,再认真阅读了阮一峰老师的文档后,发现还是有一些不知道的细节... 博客.前端积累文档.公众号.GitHub 内容: var和let/const的区别 块级作用域 不存在变量提升 暂时性死区 不可重复声明 let.const声明的全局变量不会挂在顶层对象下面 const命令两个注意点: const 声明之后必须马上赋值,否则会报错 const 简单类型一旦声明…
js运行时内置了一个Global对象. 这个Global对象跟运行环境有关.在浏览器运行环境中.Global就是window对象.在nodejs中.Global对象是global对象. 当你在浏览器环境中,直接使用一个未经定义的变量,例如foo=123;那么foo这个变量自动声明为全局变量.变量引用自动挂载到了Global对象,即window对象上,使用上等同于全局对象的属性,你可以试试来验证. 如: <!DOCTYPE html> <html lang="en"&g…
我们创建一个变量: var a = 100: 同时,大家也知道,就是不写var关键字也可以创建.在很多教程和说法中,将没有var 的这个名称称之为“全局变量”.如果我在全局直接写一个var abc = 10,我们也常常视其为全局变量. 但是,有var和没var到底有什么区别呢: 没有加var创建的是window下的一个属性,而且是可以被delete的,而var声明的变量只能被垃圾回收机制回收,不能被delete,这就是它和var声明变量的区别. var ccc = 22; delete ccc;…
${var:-DEFAULT}和${var=DEFAULT}的区别: ${var:-DEFAULT} If var not set or is empty, evaluate expression as $DEFAULT  ${var=DEFAULT} If var not set, evaluate expression as $DEFAULT 如下例子,var先被赋值为空,然后用“=”赋值不会影响var的值,但用":-"操作符时可以改变var的值: ----------------…
var console.log(a) // undefined var a = 1 从上述代码中我们可以发现,虽然变量还没有被声明,但是我们却可以使用这个未被声明的变量,这种情况就叫做提升,并且提升的是声明.对于这种情况,我们可以把代码这样来看 var a console.log(a) // undefined a = 1 接下来我们再来看一个例子 var a = 10 var a console.log(a) 对于这个例子,如果你认为打印的值为undefined那么就错了,答案应该是10,对于…
我们都知道函数中声明变量不用Var时这个变量会成为全局变量,但是并不是函数一开始执行就会把它变为全局变量,必须执行到这条语句. 看一段代码 function f(){    alert(a);    a = 3;}f(); //error: a is not defined 只有函数内部执行到a = 3时,a才会成为全局变量并且等于3,因为这个函数不可能执行到这句语句,所以error: a is not defined 再看一段代码 (function(){ bar(); bar=functio…
var.let和const区别 变量提升问题 var声明的变量存在变量提升,而let与const声明的变量不存在变量提升,但存在暂时性死区 即在预编译阶段,js引擎扫描代码时,遇到变量声明,会把var声明提到作用域的顶端,而 let和const声明,则会被放在暂时性死区中.访问暂时性死区中的变量,会触发运行时错误,只有执行变量声明语句后,变量才会从暂时性死区中移除,才可正常访问 重复定义问题 var声明的变量可以重复定义 let与 const声明的变量,在同一作用域下不可重复声明,否则报错 全局…
var 声明的变量,作用域是当前 function 没有声明的变量,直接赋值的话, 会自动创建变量 但作用域是全局的. //----------------- function doSth() { a = "AAA"; } doSth(); // 执行一次 doSth alert(a); // 可以看到 "AAA" //----------------- 如果用了 var //----------------- function doSth() { var a =…
因为 JSON格式的语法是引擎直接解释的.而new Array 则需要调用Array的构造器.还有就是1.当你需要将一个数字转化为字符串时可以这样定义:var s=""+1; 这样的转化最快.2.当你定义一个对象类型时:var o={}; 而已 var o=new Object();道理是同样,new Object()需要调用Object的构造器.3.在js中执行字符串替换时,或查找字符串,需要进行循环时,可以考虑使用正则,速度更快.4.尽可能的少定义.使用全局变量…
1.let不存在变量提升,必须升明后才可用. 'use strict'; (function(){ console.log(varTest); console.log(letTest); var varTest = 'var'; let letTest = 'let'; }()) //结果:undefined // letTest is not defined 2.let不允许在相同作用域内,重复声明同一个变量. (function(){ let let1 = 'test let'; let l…
在js中用return和不用return,输出结果有的时候傻傻搞不清,之前在网上看到个例子挺经典,不过讲的不清楚,上例子: var i = 0; function fn(){    i++;   if(i < 10){        console.log(i);        fn();   }else{        return i;   }}var result = fn();console.log(result); 这也是道隐藏了坑的经典面试题,看上去好像是输出10,然而打印出来的确实…
本文主要讲三个 问题 prototype 和 proto function 和 object new 到底发生了什么 prototype 和 proto 首先我们说下在 JS 中,常常让我们感到困惑的地方,就是 prototype 和 __proto__ 到底是干嘛的 1. __proto__ 就是 Javascript中 所谓的原型 (这里,我们还是拿具体的例子来说明吧) function A (name) { // 这里是一个构造函数 thia.name = name } var Aobj…