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. 基本数据类型(list,tuple)

    基本数据类型(list,tuple)内容: 1. 列表2. 列表的增删改查3. 列表的嵌套4. 元组和元组嵌套5. range⼀. 列表1.1 列表的介绍列表是python的基础数据类型之⼀,其他编程 ...

  2. 关于 No buffer space available (maximum connections reached?): connect 的处理

    一.问题: hudson一个应用打包部署一直不成功,检查报错 检查项目的JOB配置,开始以为是SVN的问题,但是重启SVN后问题一直存在 二.分析: TCP协议中,关闭TCP连接的是Server端(当 ...

  3. JS散度

    https://blog.csdn.net/weixinhum/article/details/85227476

  4. axaj 的回调

    //为了动态生成表格获取数据用ajax获取servlet回调数据 <script> $.ajax({ url = "servlet地址", type : "p ...

  5. eclipse项目运行文件位置

    位置:E:\eclipseWorkSpace\.metadata\.plugins\org.eclipse.wst.server.core\tmp2\wtpwebapps\svnadmin

  6. [leetcode]133. Clone Graph 克隆图

    题目 给定一个无向图的节点,克隆能克隆的一切 思路 1--2 | 3--5 以上图为例, node    neighbor 1         2, 3 2         1 3         1 ...

  7. Python爬虫项目--爬取某宝男装信息

    本次爬取用到的知识点有: 1. selenium 2. pymysql 3  pyquery 正文 1. 分析目标网站 1. 打开某宝首页, 输入"男装"后点击"搜索&q ...

  8. C#使用MiniDump捕获异常

    c/c++语言里MiniDump是一个重要的调试手段,他们没有C#/java这样语言有很多异常输出信息( JVM异常导出bug日志功能,通常在jdk目录,文件格式hs_err_%pid%.log,pi ...

  9. vuex写法

    <template> <div class="hello"> <p>{{count}}</p> <p> <butt ...

  10. 线程 day40

    操作系统线程理论 线程概念的引入背景 进程 之前我们已经了解了操作系统中进程的概念,程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程.程序和进程的区别 ...