Javacript陷阱

--内容转自《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";


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值