我们在看js声明变量的时候,经常会发现有的变量前会带var 但又的则没有,那么这究竟有什么区别呢?

如果这种情况发生在函数里的话, 加var定义的变量是局部变量,不加var定义的就成了全局变量。

//使用var
var y="dsh";
function test(){
var y="wx";
}
test();
console.log(y);

[Web浏览器] "dsh"

//不使用var
var y="dsh";
function test(){
y="wx";
}
test();
console.log(y);

[Web浏览器] "wx"

在全局作用域下,使用var定义的变量不可以delete,没有var 定义的变量可以delete.
这也就说明隐含全局变量严格来说不是真正的变量,而是全局对象的属性,因为属性可以通过delete删除,而变量不可以。

var x="dsh";
y="wx";
delete x;
delete y;
console.log(x);
console.log(y);

[Web浏览器] "dsh"
[Web浏览器] "Uncaught ReferenceError: y is not defined"

使用var 定义变量还会提升变量声明,但不用var的变量则不会

console.log(x);//提升变量x为undefined
console.log(y);//不提升,y没有定义过。y is not defined
var x="dsh";
y="wx";

[Web浏览器] "undefined" 
[Web浏览器] "Uncaught ReferenceError: y is not defined"

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

2、变量var关键字的更多相关文章

  1. JavaScript var关键字、变量的状态、异常处理、命名规范等介绍

    本篇主要介绍var关键字.变量的undefined和null状态.异常处理.命名规范. 目录 1. var 关键字:介绍var关键字的使用. 2. 变量的状态:介绍变量的未定义.已定义未赋值.已定义已 ...

  2. 变量声明关键字var ,let,const

    今天带大家了解的是比较有趣的几个变量声明关键字var,let,const. 我们在最初接触JS的时候,变量是我们重要的一个组成部分,在使用时规定必须要先进行声明,否则网页将会报错: console.l ...

  3. JavaScript中var关键字的使用详解

    作用 声明作用:如声明个变量. 语法 ? 1 var c = 1; 省略var 在javascript中,若省略var关键字而直接赋值,那么这个变量为全局变量,哪怕是在function里定义的. ? ...

  4. Linq专题之var关键字

    在c#1.0,c#2.0中声明一个变量时,总是要指定变量的类型,如果不指定变量类型编译器就会报错,产生编译错误.在c#3.0中我们可以不指定变量的具体类型,而使用一个新的关键字"var&qu ...

  5. C#中隐式类型本地变量var

    在新接触的项目中,看到很多声明变量时用var.只记得在javascript中声明变量用var.今天在家里看C#和.Net高级编程,看到隐式变量这一块,就总结一下C# 中隐式变量var的用法. 1.C# ...

  6. c#中var关键字用法

    Technorati 标签: C# 转载自csdn:http://blog.csdn.net/robingaoxb/article/details/6175533   var关键字是C# 3.0开始新 ...

  7. C#中var关键字【转】

    [转]http://blog.csdn.net/courageously/article/details/5695626 var关键字是C# 3.0开始新增的特性,称为推断类型 . 可以赋予局部变量推 ...

  8. 浅谈 var 关键字

    提起 var关键子,程序员的第一反应就是JavaScript, 事实上这个关键子在其他语言中也有被采用. 比如说C#, 比如说kotlin, 用法和JavaScript中使用差不多,作为要声明变量的前 ...

  9. 什么时候用var关键字

    C#关键字是伴随这.NET 3.5以后,伴随着匿名函数.LINQ而来, 由编译器帮我们推断具体的类型.总体来说,当一个变量是局部变量(不包括类级别的变量),并且在声明的时候初始化,是使用var关键字的 ...

随机推荐

  1. Cocos2d-x 3.x事件分发机制总结

    在2.x中处理事件需要用到委托代理(delegate),相信学过2.x的触摸事件的同学,都知道创建和移除的流程十分繁琐.而在3.x中由于加入了C++11的特性,而对事件的分发机制通过事件分发器Even ...

  2. jmeter连接数据库

    新建一个 Thread Group: 新增 JDBC Connection Configuration: 点击新增的 JDBC Connection Configuration ,需要修改的参数包括: ...

  3. C# 连接 Access 数据库

    c#连接Access 数据库需要System.Data, System.Data.OleDb using System.Data using System.Data.OleDb public OleD ...

  4. Heap Sort

    #include<iostream> using namespace std; const int MAX = 1001; int l[MAX]; //Heap Sort void Hea ...

  5. 导入excel成一个list集合不支持大文件倒入(优化点在于分批分线程导入)

    package com.bj58.saletb.news.utils; import org.apache.log4j.Logger; import org.apache.poi.ss.usermod ...

  6. LCT

    一个LCT看了一天了,但是很多地方还是理解的很模糊,简单谈一下理解. LCT支持的是对于森林的分裂.合并,以及查询节点的连通性等操作. 对于这片森林来说,它是由一坨树组成的,对于每一棵树,我们采用类似 ...

  7. URLEncode编码和URLDecode解码

    String text1 = java.net.URLEncoder.encode("中国" ,"utf-8" ); String text2 = java.n ...

  8. NodeJs md5 sha1加密

    var crypto = require('crypto');module.exports = {  md5: (str)=> {    return crypto.createHash('md ...

  9. sqlite导入后无法使用

    问题:sqlite导入后无法使用 解决方式:引入sqlite3 的libraries ,然后再在 projectName-Bridging-Header.h 中添加 #import "sql ...

  10. spring mvc 实现文件上传下载

    /** * 文件上传 * @param pictureFile */ @RequestMapping("/reportupload") public ResponseInfo up ...