"with"关键字的任何非平凡且有用的示例示例?

nto*_*end 4 javascript with-statement

我仍然觉得with关键字有点...... 神秘.

简而言之,with表现如下:

with (obj) {
    // do stuff
}
Run Code Online (Sandbox Code Playgroud)

这会添加obj到作用域链的头部,然后执行with-block.当块完成时,它obj从作用域链的头部移除.

根据MDC,这可以让你做类似的事情

var a, x;
var r = 10;
with(Math) {
    a = PI * r * r;
    x = r * cos(PI / 2);
}
Run Code Online (Sandbox Code Playgroud)

所以我可以直接引用Math- 像PI- 的属性,不用多说Math.PI.哪个好,但有点无用.

任何人都可以提供有趣用法的例子with吗?

med*_*iev 5

使用for循环内部函数的标准闭包解决方案的替代方法:

<a  href="#">blah</a><br>
<a  href="#">blah</a><br>
<a  href="#">foo</a><br>
<script>
    (function() {
    var anchors = document.getElementsByTagName('a');
        for ( var i = anchors.length; i--; ) {
            var link = anchors[i];
            with ({ number: i }) {
                link.onclick = function() {
                    alert(number);
                };
            }
        }
    })();
</script>
Run Code Online (Sandbox Code Playgroud)

感谢nlogax提供我几乎扯下一个解决方案: 使用Javascript臭名昭著的循环问题?

这是标准解决方案:

<script>
    (function() {
    var anchors = document.getElementsByTagName('a');
    for ( var i = anchors.length; i--; ) {
        var link = anchors[i];
        (function(i) {
            link.onclick = function() {
                alert(i)
            }
        })(i);
    }
    })();
</script>
Run Code Online (Sandbox Code Playgroud)