JavaScript 个变量是引用、值还是指针
Are JavaScript variables a reference, value or pointer
搜索并没有完全找到我正在寻找的答案。
我很好奇将变量设置为查询选择器是引用、指针还是值。
示例 1:
// lets assume there is only one ".class"
var element = document.queryselector(".class");
element.classList.remove("effect1");
element.classList.add("effect2");
示例 2:
document.queryselector(".class").classList.remove("effect1");
document.queryselector(".class").classList.add("effect2");
这些是一回事吗?或者通过将变量设置为选择器,您是否节省了开销?
我的想法是,如果变量是一个值,那么在使用变量时查询选择器将不会搜索 DOM。
希望这是有道理的。
在 Javascript 中,对象总是通过引用传递,因此两个示例具有相同的效果,因为 document.querySelector
returns 一个 DOM 元素(它是一个对象)。
作为简短的 FYI:
- 基本类型总是按值传递
- 数组也通过引用传递
你的第一个例子效率更高,因为你只需要搜索 DOM 一次,而且它们的效果完全没有区别。
Javascript总是按值传递,但是当变量引用对象(包括数组)时,“值”是对对象的引用。
var element = document.queryselector(".class"); // element is an object
所以这两个例子完全一样。在引擎盖下只是访问元素对象的类列表属性。
是的,第一个代码片段很有效,因为我们节省了再次获取 DOM 个节点的周期。如果我们只是访问 dom 个元素节点几次,比如 10-100(通常在中型到大型项目中),那么性能不会受到太大影响。我的意思是你可以忽略它。这不会是一个剧烈的影响。
但是,是的,如果我们访问 dom 个节点一百万次,那么这种影响是显而易见的。
让我们检查100万次,只为了访问DOM个元素节点。
first = performance.now();
new Array(1000000).fill(1).forEach(() => {
div = document.querySelector('div');
})
second = performance.now();
console.log(`${second - first} milliseconds`); //337.2850000159815 milliseconds
// Result can alter from machine to machine
希望现在已经清楚了。
搜索并没有完全找到我正在寻找的答案。
我很好奇将变量设置为查询选择器是引用、指针还是值。
示例 1:
// lets assume there is only one ".class"
var element = document.queryselector(".class");
element.classList.remove("effect1");
element.classList.add("effect2");
示例 2:
document.queryselector(".class").classList.remove("effect1");
document.queryselector(".class").classList.add("effect2");
这些是一回事吗?或者通过将变量设置为选择器,您是否节省了开销?
我的想法是,如果变量是一个值,那么在使用变量时查询选择器将不会搜索 DOM。
希望这是有道理的。
在 Javascript 中,对象总是通过引用传递,因此两个示例具有相同的效果,因为 document.querySelector
returns 一个 DOM 元素(它是一个对象)。
作为简短的 FYI:
- 基本类型总是按值传递
- 数组也通过引用传递
你的第一个例子效率更高,因为你只需要搜索 DOM 一次,而且它们的效果完全没有区别。
Javascript总是按值传递,但是当变量引用对象(包括数组)时,“值”是对对象的引用。
var element = document.queryselector(".class"); // element is an object
所以这两个例子完全一样。在引擎盖下只是访问元素对象的类列表属性。
是的,第一个代码片段很有效,因为我们节省了再次获取 DOM 个节点的周期。如果我们只是访问 dom 个元素节点几次,比如 10-100(通常在中型到大型项目中),那么性能不会受到太大影响。我的意思是你可以忽略它。这不会是一个剧烈的影响。 但是,是的,如果我们访问 dom 个节点一百万次,那么这种影响是显而易见的。 让我们检查100万次,只为了访问DOM个元素节点。
first = performance.now();
new Array(1000000).fill(1).forEach(() => {
div = document.querySelector('div');
})
second = performance.now();
console.log(`${second - first} milliseconds`); //337.2850000159815 milliseconds
// Result can alter from machine to machine
希望现在已经清楚了。