在javascript中,有一个with语句可以让我们在代码编写时减少一定的重复代码,优化我们的编程过程。with语句主要是用来改变作用域链的,代码块内所用的变量在with语句作用域链上被添加到了起始位置。接下来,我们就深入学习一下with语句的用法和注意事项。
比如,我们经常需要在代码中使用同一个对象中的很多属性,这时候就可以用with语句来统一操作它们。以下是一个简单的例子:
var person = {name: 'John',age: 21,gender: 'male'};with (person) {console.log(name + ' is ' + age + ' years old and is a ' + gender + '.');}在这个例子中,我们使用了with语句将对象person的属性添加到作用域链中。在with语句块内部,我们可以直接使用person对象的属性而无需每次都写person.name、person.age和person.gender。
然而,我们需要注意的是with语句增加了查找作用域链的时间。如果在with语句之前已经定义了同名的变量,那么执行with语句的时候就不会再使用同名变量。同名变量是全局变量和本地变量都可以作为with语句内部定义变量的先决条件。以下是一个例子:
var person = {name: 'John',age: 21,gender: 'male'};var name = 'Steven';with (person) {console.log(name); //输出John}这段代码执行后,输出了John而不是Steven。这是因为with语句将person的属性添加到作用域链的最前面,所以先查找到了person.name。
另外,with语句只作用于对象,不作用于原始类型变量,如字符串和数字。以下是一个例子:
var num = 10;with (num) {console.log(num); //输出10}var str = 'hello';with (str) {console.log(str); //输出hello}我们可以看到,with语句对num和str都没有产生效果,所以输出结果是原始类型变量本身的值。
总的来说,with语句可以提升编码效率,但在使用之前一定要确保没有同名变量被定义。同时,避免在with语句内定义全局变量。
上一篇:javascript中.before
下一篇:JavaScript中this详解









