严格模式的主要用途之一是防止在全局范围内声明变量。 在 JavaScript 中,全局作用域是默认作用域。 这意味着在函数外部声明的任何变量都会自动添加到全局范围。
这可能会导致问题,因为很容易无意中覆盖全局范围内的现有变量。 例如,如果您声明一个与现有全局变量同名的变量,则现有变量将被覆盖。
为避免这种情况,请确保始终在函数内声明变量。 这将确保它们不会添加到全局范围内。
4.使用==代替===
在 JavaScript 中,有两种方法可以检查两个值是否相等:== 和 ===。 == 运算符检查值是否相等,而 === 运算符检查值和类型是否相等。
大多数时候你想使用 === 运算符,因为它更严格。 但是,== 在某些情况下可能很有用。 例如,如果您正在比较两个可能属于不同类型的值,== 很有用,因为它会在比较之前将这些值转换为相同的类型。
5.记得绑定这个
在使用 JavaScript 的面向对象特性时,您经常需要在方法内部引用当前对象。 为此,应使用 this 关键字。
但是,this 的值可能会根据调用方法的方式而改变。 例如,如果您在对象上调用方法,则 this 将引用该对象。 但是,如果您对另一个对象调用相同的方法,则 this 将引用该对象。
这可能是个问题,因为很难跟踪 this 指的是什么。 为避免这种情况,请确保将 this 的值绑定到当前对象。 这可以通过使用 bind 方法来实现:
var obj = {
foo: function() {
console.log(this);
}
};
var bar = obj.foo.bind(obj);
bar(); // prints the obj object1.2.3.4.5.6.7.
在上面的代码中,我们使用 foo 方法创建了一个对象。 然后我们创建一个名为 bar 的新变量并将其设置为在 foo 上调用 bind 的结果。 这会将 foo 中 this 的值设置为 obj 对象。 当我们调用 bar 时,它会将 obj 打印到控制台。
6.修改字符串而不是创建新字符串
在 JavaScript 中,字符串是不可变的。 这意味着一旦创建了一个字符串,就不能更改它。
但是,有几种方法可用于修改字符串。 例如,replace 方法可用于将一个字符串的一部分替换为另一个字符串。
var str = "Hello world!";
str.replace(" world", " JavaScript"); // returns "Hello JavaScript!"1.2.
replace 方法实际上并没有修改原始字符串,它只是返回修改后的新字符串。 记住这一点很重要,因为在您打算创建新字符串时很容易无意中修改字符串。
为避免此错误,请确保在修改现有字符串时创建新字符串。 您可以使用 slice 方法来执行此操作:
var str = "Hello world!";
var newStr = str.slice(0, 5) + " JavaScript!"; // returns "Hello JavaScript!"1.2.
在上面的代码中,我们使用 slice 方法创建了一个包含原始字符串的前五个字符的新字符串。 然后我们将它与字符串“JavaScript!”连接起来,这将创建一个新字符串,我们可以将其分配给 newStr 变量。
7、导致内存泄露
内存泄漏是在使用 JavaScript 编程时可能发生的问题。 当您保留对不再需要的对象的引用时html调用js函数,就会发生这种情况。
例如,以下面的代码为例:
var arr = [1, 2, 3, 4, 5];
var foo = function() {
arr.push(6);
};
setInterval(foo, 1000);1.2.3.4.5.
在上面的代码中,我们创建了一个数组和一个向数组添加新元素的函数。 然后,我们设置一个定时器,每秒调用一次该函数。
此代码将导致内存泄漏html调用js函数,因为 arr 数组永远不会被垃圾回收。 这是因为 foo 函数引用了 arr 数组,foo 函数每秒都会被调用一次。
为避免此错误,请确保删除对不再需要的对象的引用。 在上面的示例中,我们可以使用 clearInterval 方法来执行此操作:
var arr = [1, 2, 3, 4, 5];
var foo = function() {
arr.push(6);
};
var interval = setInterval(foo, 1000);
clearInterval(interval);1.2.3.4.5.6.
在上面的代码中,我们将 setInterval 的返回值存储在一个变量中。 此返回值是对创建的间隔的引用。 然后,您可以使用 clearInterval 方法清除间隔并删除对 arr 数组的引用。
8. 不要使用 IIFE
IIFE(immediately invoked function expression)是立即执行的函数。 IIFE 通常在 JavaScript 中用于创建局部作用域。
例如,以下面的代码为例:
var foo = "foo";
(function() {
var foo = "bar";
})();
console.log(foo); // prints "foo"1.2.3.4.5.
在上面的代码中,我们有一个名为 foo 的全局变量,其值为“foo”。 然后我们创建一个带有同名局部变量的 IIFE。 这个局部变量只能在 IIFE 内部访问。
当我们将 foo 的值记录到控制台时,它会打印“foo”。 这是由于 IIFE 创建了一个不同于全局作用域的新作用域。
为避免此错误,请确保在您要创建新作用域时使用 IIFE。
翻译: