@אהרן
א. <use strict>? אתה מכניס א"ז בקביעות לסקריפטים שלך?
כן.
@אהרן
ב. מה??
תחשוב על with כמו import שעושים ב C# למרחב שמות לדוגמה אם תרשום ב JS ככה:
var r = 10;
with (Math) {
x = r * cos(PI);
}
זה זהה ל:
var r = 10;
var x = r * Math.cos(Math.PI);
console.log(x);
זה פשוט חוסך את ההקלדה של מרחב השמות / המשתנה שעליו בוצע ה with, וכך גם במקרה שלנו ב forEach, בגלל שהוא בתוך בלוק של with על המערך לא צריך לרשום את שם המערך.
אגב זו תכונה מאוד בעייתית איך שמימשו אותה ב JS, ב VB לדוגמה אתה לא צריך להקליד את שם המשתנה אבל צריך להקליד נקודה במקום,
במימוש הזה זה יכול לגרום לבלבול, לדוגמה כאן הוא ידפיס את x מתוך o, שזה לא קריא בכלל:
function test(o,x) { with(o) {alert(x);}}
var o = {x:'test1'};
test(o,'test2');
ואם אין x ב o אז הוא כן ידפיס את הפרמטר x:
function test(o,x) { with(o) {alert(x);}}
var o = {u:'test1'};
test(o,'test2');
לעיון נוסף
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/with
פורסם במקור בפורום CODE613 ב18/08/2015 11:49 (+03:00)