您的位置:首页 > 编程语言 > Java开发

Javacript陷阱

2017-07-25 11:04 176 查看
--内容转自《D3设计交互式图表》

1、  动态类型

JavaScript 是一种松散类型的语言。换句话说,不必提前声明保存在变量中的数据是什么类型。而JavaScript则会根据赋给变量的数据,自动推断其类型。(注意,’’或""表示字符串。)不用知道保存什么数据,就可以声明和命名变量。甚至随意改变保存的数据类型。如果你不确定某个变量中保存着什么类型的数据,可以使用typeof操作符。

 

2、 变量提升

在我们印象里,浏览器会从上到下依次执行JavaScript 代码。但有时候也不一定。在其他很多语言中,i 会到for 循环开始时才被声明,这符合我们的预期。但由于存在一种叫做变量提升的机制,JavaScript 中的变量声明会被提升到函数上下文的顶部。

比如:

var numLoops = 100;
for (var i = 0; i < numLoops; i++) {
console.log(i);
}

对于前面的例子来说,i 实际上在for 循环开始之前就有了定义。

 

3、  函数级作用域

JavaScript 中的变量只能限制在函数中,即在函数(而不是任何块)中声明的变量只能在函数内部访问。假如你使用过其他语言,那么对这一点必须格外注意。关键要记住:要想封闭某个值,就得把它们放到函数里。

 

4、 全局命名空间

window 在浏览器中是一个顶级对象,包含所有JavaScript 中能直接访问到的对象。你看到的所有这些对象和值都包含在全局作用域中。换句话说,如果你每次都在全局作用域中声明新变量,那这个变量就会被加到window 对象下面。

解决命名冲突问题有两个简单的办法(说明一下,不到后面你不用担心这一点)。

1)只在函数里面声明变量。虽然有时• 候也不是绝对可行,但函数级作用域可以防止其本地变量跟其他变量发生冲突。

2)只声明一个全局对象,然后把你本来想作为全局变量的值都作为这个对象的属性。

比如:

var Vis= {}; // 声明空的全局对象

Vis.zebras = "still pretty amazing";

Vis.monkeys = "too funny LOL";

Vis.fish = "you know, not bad";
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: