2015/11/25补充: 关于变量声明这里有详细的解释:

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/var

一个比较好的全面关于Javascript的文档说明. 推荐喜欢或正在学习Javascript的朋友每一个部分都

详细的看看. 之前很多模糊的概念都能在这里得到清晰的答案.

////////////////////////////////////////////////////////////////////////////////////////////////////////

Javascript声明变量时

var aaa = 111;

aaa = 111;

两种方式一样吗?

废话少说,先上代码.

var aaa = 11;

function test4(){
var aaa = 22;
} test4(); console.log(aaa);

结果是什么呢?

11

这个好理解, 函数内的var aaa声明是内部变量,这时结果是第一个aaa的值.

变动一下如下:

var abc = 11;

function test4(){
abc = 22;
} test4(); console.log(abc);

结果是什么呢?

22

再改:

function test4(){
var aaa = 22;
} test4(); console.log(aaa);

结果怎样? 运行报错了! ReferenceError: aaa is not defined!

改:

function test4(){
var aaa = 22;
} test4(); console.log(test4.aaa);

运行不会报错,输出结果是 undefined.

结论1: 函数或者对象构造内声明的变量是私有的. 外部无法访问到. 包括原型继承后的对象. 见前一篇文章.

可是如果这样:

function test4(){
bbb = 33;
} test4(); console.log(bbb);

结果是

33

点解?

这就是有var 和没有 var的声明的区别.

结论2: 不加var 在函数或者构造内就是赋值, 从函数内往上一层层寻找变量bbb,一直到顶层没有. 就在顶层声明一个 var bbb;

很可怕假如一个大的项目,在这里改变了bbb的值, 并没有添加var 碰巧整个项目全局变量有个同名bbb被改变,不加var不是只作用在这个函数或对象内. 出了错误很难找.

所以书写代码必须谨慎. 声明变量改加的就加不能怕麻烦. 结果是完全不同的.

追加:

2015-10-20

var 声明的全局变量。 和隐式声明(没有用var)声明的全局变量的区别:

var 声明的全局变量不能 delete  隐式声明的(没有用var)的可以使用delete删除掉。

 

javascript声明对象时 带var和不带var的区别的更多相关文章

  1. JS声明对象时属性名加引号与不加引号的问题

    般情况下属性名加引号和不加引号是都可以的,效果是一样的. var obj = { name : '你好', 'age' : 1, }; document.write( obj['name'] + '& ...

  2. C#在声明对象时对其赋值的一种方式

    今天学会一种更方便的赋值方式,如下, 同时存档一个通过 打开对话框 获取地址的方式. private string GetSaveAsPathXls(string defaultFileName) { ...

  3. Javascript声明和使用变量

    1.1变量的声明 要在程序中使用变量,就必须从声明变量学起,因为Javascript语法与我们基础的其他程序语言声明变量的方法略有不同,但是Javascript语法的变量应用非常强大,使用也非常简单. ...

  4. 样式声明对象:document.styleSheets[0].rules[4].style;

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. JavaScript基础对象创建模式之声明依赖模式(023)

    运用了命名空间(Namespace)模式后, 就可以使用一些JavaScript库了,比如YAHOO作用YUI2库的全局对象,可以通过 YAHOO.util.Dom 和 YAHOO.util.Even ...

  6. 为什么JavaScript声明变量的时候鼓励加var关键字

    在JavaScript中,var用来声明变量,但是这个语法并不严格要求,很多时修改,我们可以直接使用一个变量而不用var声明它. var x = "XX"; y ="xx ...

  7. 一文带你彻底理解 JavaScript 原型对象

    一.什么是原型 原型是Javascript中的继承的基础,JavaScript的继承就是基于原型的继承. 1.1 函数的原型对象 在JavaScript中,我们创建一个函数A(就是声明一个函数), 那 ...

  8. javascript jquery封装对象时的错误,求解!我想知道为什么

    jquery   封装对象时的错误 --------------------------------------------<input id="name" name=&qu ...

  9. JavaScript 中对象解构时指定默认值

    待解构字段为原始值 正常情况下, const obj = { a: 1, b: 2, }; const { a, b } = obj; console.log(a, b); // 1 2 当被解构字段 ...

随机推荐

  1. VMware Ubuntu安装

    不是每一个程序员都必须玩过linux,只是博主觉得现在的很多服务器都是linux系统的,而自己属于那种前端也搞,后台也搞,对框架搭建也感兴趣,但是很多生产上的框架和工具都是安装在服务器上的,而且有不少 ...

  2. 关于RAID的概述

    Raid 0:一块硬盘或者以上就可做raid0优势:数据读取写入最快,最大优势提高硬盘容量,比如3快80G的硬盘做raid0 可用总容量为240G.速度是一样.缺点:无冗余能力,一块硬盘损坏,数据全无 ...

  3. js,JavaScript,a标签onclick传递参数不对,A标签调用js函数写法总结

    错误示例: <a href="javascript:waterLineEdit(${goods.goods_id})" >修改 </a> <!-- 浏 ...

  4. Reportviewer中的函数使用——打印当前日期并格式化

    如2017-10-23 12:20:20 通过DateTime.Now.ToString("yyMMddHHmmss")变为 20171023122020字符串

  5. Angular之替换根组件

    一 在index.html中,替换根组件选择器 <!doctype html> <html lang="en"> <head> <meta ...

  6. PAT L2-013 红色警报(并查集求连通子图)

    战争中保持各个城市间的连通性非常重要.本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报.注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个城市并不 ...

  7. java链接JDBC中的?问题

    String sql = "select * from student where name= ?"; PreparedStatement pst = conn.prepareSt ...

  8. AngularJS——第1章 简介

    第1章 简介 由谷歌公司开发维护的前端MVC框架,克服了HTML在构建应用上的诸多不足,降低了开发成本,提高了效率. 一个框架 以数据和逻辑作为驱动 AngularJS核心特性:模块化,双数据绑定,语 ...

  9. 用java修改文件的编码

    1.将本地的文件转换成另外一种编码输出,主要逻辑代码如下: /** * 将本地文件以哪种编码输出 * @param inputfile 输入文件的路径 * @param outfile 输出文件的路径 ...

  10. Non-negative Integers without Consecutive Ones

    n位二进制,求不包含连续1的二进制(n位)数字个数. http://www.geeksforgeeks.org/count-number-binary-strings-without-consecut ...