JavaScript中的变量声明早于赋值分析_javascript技巧

如下

复制代码 代码如下:

var a = 3;

实际有两个步骤:
1 初始化a为undefined
2 a赋值3

因此会出现一些“匪夷所思”的现象,即JS中变量可以先使用后声明。这在Java中是不允许的。

复制代码 代码如下:

System.out.println(a);
int a = 1;

编译通不过。但JS可以,如下

复制代码 代码如下:

alert(a);
var a;

虽然是undefined,但不会报错。说明a的确声明了,且为undefined。

如果只是“alert(a)”,没有“var a”的话JS引擎会报错的。

复制代码 代码如下:

alert(a);

FF中如下

虽然可以先使用再声明,但这样会造成赋值的效果丢失。如下

复制代码 代码如下:

alert(a);
var a = 1;

这次输出的仍然是undefined而非1。

又如,

复制代码 代码如下:

alert('a' in window); // true
var a;

虽然代码形式上写在alert后,引擎仍然先自动处理var的声明。最后输出的是true。

明白了这些就不难理解下面的代码运行结果了

复制代码 代码如下:

if (!("a" in window)) {
var a = 1;
}
alert(a);

时间: 2024-12-04 10:09:36

JavaScript中的变量声明早于赋值分析_javascript技巧的相关文章

Javascript中的函数声明与函数表达式(奇技淫巧)_javascript技巧

举一个例子: [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行] 试一下就知道这段代码的意思就是声明一个函数,然后立刻执行,因为Javascript中的变量作用域是基于函数的,所以这样可以避免变量污染,但这里的位运算符"~"乍一看让人摸不到头脑,如果去掉它再运行则会报错:SyntaxError. 在阐述为什么之前,让我们先来明确Javascript中的两个概念:函数声明和函数表达式: 先来看看什么样的是函数声明: [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行] 再来

简单谈谈javascript中的变量、作用域和内存问题_javascript技巧

[变量] [1]定义:可变的量,相当于给一个不定的数据起了一个外号.变量是存储信息的容器. [2]特性:js中的变量是松散类型的,可以保存任何类型的数据.它只是在特定时间用于保存特定值的一个名字而已.由于不存在定义某个变量必须要保存何种数据类型值的规则,变量的值及其数据类型可以在脚本的生命周期内改变. [3]变量声明:变量可以在声明时赋值,但不能有其他操作,如+=.-=等 var a = 2;//是正确的 var a += 2;//是错误的 var a = 2++;//是错误的,++只能用于变量

javascript中innerText和innerHTML属性用法实例分析_javascript技巧

本文实例讲述了javascript中innerText和innerHTML属性用法.分享给大家供大家参考.具体分析如下: 几乎所有DOM元素都有innerText,innertHTML属性(注意大小写),分别是元素标签内 的文本表示形式和HTML源代码,这两个属性是可读可写的 innerHTML也可以取代createElement,属于简单,粗放型,后果自负的创建 <html xmlns="http://www.w3.org/1999/xhtml"> <head>

javascript中parseInt()函数的定义和用法分析_javascript技巧

本文实例讲述了javascript中parseInt()函数的定义和用法.分享给大家供大家参考.具体分析如下: 此函数可以解析一个字符串,并返回一个整数. 语法结构: 复制代码 代码如下: parseInt(string, type) 参数列表: 参数 描述 string 必需.要被解析的字符串. type 可选.表示要解析的数字的基数,通俗的说就是数字的进制,比如二进制.八进制或者十六进制.该值介于2 ~ 36之间. 详细说明: 一.指定type参数: 指定type参数后,函数就会按照指定的t

javascript中Array数组的迭代方法实例分析_javascript技巧

本文实例讲述了javascript迭代的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: //filter() 利用指定的函数确定是否返回数组中包涵的某一项 var num = [1,2,3,4,5,6,12]; num.filter(function(item, index, array){ return (item > 2); //[3, 4, 5, 6, 12] }); //map() 返回一个数组,数组中每一项都是在原始数组中的对应项上运行传入参数的结果 var nu

javascript中call和apply的用法示例分析_javascript技巧

call和apply的用法,并利用call实现js类的继承 /* * 矩形 */ function Rectangle(len,width) { this.len = len; this.width = width; } /* * 乘以 */ function multiply(a,b) { return a * b; } // 矩形实例 var rectangle = new Rectangle(15, 30); //求矩形面积 var proportion = multiply.call(r

JavaScript的变量声明提升问题浅析(Hoisting)_javascript技巧

一.变量声明提升       hoisting 英['hɔɪstɪŋ] 美['hɔɪstɪŋ]       n. 起重,提升       v. 把-吊起,升起( hoist的现在分词 ) 先来看一个栗子 var cc = 'hello'; function foo(){ console.log(cc); var cc = 'world'; console.log(cc); } foo(); console.log(cc); 这里将会输出 undefined.'world' .'hello' 此处

javascript中局部变量和全局变量的区别详解_javascript技巧

javascript有两种变量:局部变量和全局变量.当然,我们这篇文章是帮助大家真正的区别这两种变量. 首先,局部变量是指只能在本变量声明的函数内部调用.全局变量时整个代码中都可以调用的变量.当然,单单从字面上理解肯定是不清楚的,下面我详细的介绍下: 大家都知道,变量是需要用var关键字声明的.但是javascript中也可以隐式的使用变量,就是不用声明,直接使用.而且,千万注意,javascript把隐式声明的变量总是当成全局变量来使用的. 例如: 复制代码 代码如下: function my

深入理解JavaScript系列(12) 变量对象(Variable Object)_javascript技巧

JavaScript编程的时候总避免不了声明函数和变量,以成功构建我们的系统,但是解释器是如何并且在什么地方去查找这些函数和变量呢?我们引用这些对象的时候究竟发生了什么? 原始发布:Dmitry A. Soshnikov 发布时间:2009-06-27 俄文地址:http://dmitrysoshnikov.com/ecmascript/ru-chapter-2-variable-object/ 英文翻译:Dmitry A. Soshnikov 发布时间:2010-03-15 英文地址:http