我看到其与with开始JavaScript代码。这是一个有点混乱。它能做什么和它如何正确使用?

with (sObj) return options[selectedIndex].value;
有帮助吗?

解决方案

它增加了对包含在块中的语句的范围:

return sObj.options[selectedIndex].value;

可以成为:

with (sObj)
    return options[selectedIndex].value;

在你的情况下,好好尝试一下做了一大堆......但考虑以下几点:

var a, x, y;
var r = 10;
a = Math.PI * r * r;
x = r * Math.cos(PI);
y = r * Math.sin(PI /2);

变为:

var a, x, y;
var r = 10;
with (Math) {
  a = PI * r * r;
  x = r * cos(PI);
  y = r * sin(PI / 2);
}

...节省了几个按键。 Mozilla的文件确实会更详细一点解释的事情(有优点和使用它的利弊一起)的一个不错的工作:

与 - Mozilla开发中心

其他提示

with语句是纯语法糖,但它也可能会导致一些讨厌的错误。

请参阅与澄清声明是有害

  

如果您无法读取程序,并有信心,你知道它是什么要做的事情,你不能有信心,这是正确的去上班。出于这个原因,应避免with语句。

在与块你没有输入:

sObj.options[selectedIndex].value

但你可以使用:

options[selectedIndex].value

及其等效的

return sObj.options[selectedIndex].value;

With让您发出在特定对象的上下文的语句块。因此,所有在with块中的语句的取为括号中的对象的成员。

这可以使代码有时更易读,的它也可导致二义性,因为可变的引用可以是与sObj或全球性的。

对JavaScript的合法用途 “与” 语句 :d

我会建议不要使用,因为性能问题,这一点,但上面有哪些方法是:

为对象的 sObj (这里想必选择元件),在这一个(或以下大括号之间)的治疗中引用的所有儿童和属性与其父范围。

您的例子可以被重写为...

return sObj.options[selectedIndex].value;

...作为提供对象的范围with语句将所有相关的声明。在这种情况下,这是很没有意义的,但是,如果你在“sObj”做大量的作业,则可以节省大量的输入。

共虚构示例..

with (sObj) 
{
   if(options[selectedIndex].value < 10){
       options[selectedIndex].value++;
       total+ = options[selectedIndex].value;
   }
}

不过,话虽如此,它往往是节省打字可以用更好的方式来实现的情况。

它不是函数(如被指示的问题的标题编辑之前),但发言。它可能更有意义,如果码样本被格式化像这样:

with (sObj){
    return options[selectedIndex].value;
}

关于它做什么(

  

with语句建立了一组语句的缺省对象。 JavaScript的查找任何不合格的名称的一组语句内确定名称为默认对象的属性。如果不合格的名称相匹配的属性,则该属性在语句中使用;否则,局部或全局变量被使用。

这意味着代码示例中,首先,如果是options sObj的特性进行检查。如果是则optionssObj.options,否则它会检查其他范围由名称options

中定义的变量

使用with语句的缺点是,它是不可能从什么被访问的代码只是一眼就知道了。还有如本文所示其他更好的替代品

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top