我目前正在开发一个项目,要求我遍历一个值列表,并在列表中已有的每个值之间添加一个新值.这将在每次迭代时发生,因此列表将呈指数级增长.我决定将列表实现为链接列表是个好主意.现在,JS没有默认的Linked List数据结构,创建一个没有问题.
但我的问题是,从头开始创建一个简单的链接列表是否值得,或者只是创建一个数组并使用splice()插入每个元素会更好吗?事实上,由于开销会不会降低效率?
考虑这个JavaScript函数:
var f = function (a) {
console.log(a+" "+arguments[0]);
a = 3;
console.log(a+" "+arguments[0]);
}
Run Code Online (Sandbox Code Playgroud)
我希望a并且arguments[0]仅在函数的第二个语句之前引用相同的值.相反,它们似乎总是引用相同的值:f(2)原因
2 2
3 3
Run Code Online (Sandbox Code Playgroud)
和f({foo: 'bar'})原因:
[object Object] [object Object]
3 3
Run Code Online (Sandbox Code Playgroud)
参数标识符和arguments标识符是否以特殊方式链接?
我需要一个等待变量出现的函数.
function wait(variable, callback) {
if (typeof variable !== "undefined")
callback();
else
setTimeout(function () {
wait(variable, callback);
}, 0)
}
Run Code Online (Sandbox Code Playgroud)
使用下面的示例代码调用此函数会导致无限循环.
var a;
wait(a, function(){console.log('success')});
setTimeout(function(){a=1}, 1000)
Run Code Online (Sandbox Code Playgroud)
为什么?
我正在尝试创建一个将字符串映射到变量的数组.似乎数组存储变量的当前值,而不是存储对变量的引用.
var name = "foo";
var array = [];
array["reference"] = name;
name = "bar";
// Still returns "foo" when I'd like it to return "bar."
array["reference"];
Run Code Online (Sandbox Code Playgroud)
有没有办法让数组引用变量?
Google Analytics最初使用的是_gaq [object Array].将数组传递给函数是在JavaScript中传递一个对象,因此通过引用.
(编辑:正如答案中所指出的,引用是按值传递的.有关JavaScript中引用/值传递的更多详细信息,请参阅/sf/answers/372043801/.)
下面的代码使用jQuery等待DOM加载,然后附加一个change事件,一旦用户更改<input/>字段,该事件将向Google Analytics发送虚拟网页浏览.
var _gaq = _gaq || [];
_gaq.push(['_setAccount', _gAAccount]);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(ga, s);
})();
var Tracking = {
trackInputs: function ($, gaObject) {
var inputs = $('#signUp').find('input');
inputs.bind('change', function () {
gaObject.push(['_trackPageview', '/virtual/input']);
console.log(gaObject); // Outputs: …Run Code Online (Sandbox Code Playgroud) 假设我有一个内联脚本标记,其代码非常简单,如下所示
(function() {
var test = "This is a simple test";
function modifyTest(s) {
s = "Modified test text";
};
modifyTest(test);
console.log(test) //Will still display "This is a simple test"
})();
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用test = modifyTest(test);
更改应用我的问题是这个.这是在函数内部修改javascript变量的唯一方法,这意味着我必须始终这样做
source = function(source); 为了改变函数内部的变量,
或者我错过了阻碍我完成此操作的范围概念?
在下面的代码中,我们传递一个对象.所以,根据javascript我们传递了一个引用和操作.
var a = new Number(10);
x(a);
alert(a);
function x(n) {
n = n + 2;
}
Run Code Online (Sandbox Code Playgroud)
但是提醒10而不是12.为什么?
对原始变量进行新更改后,我无法维护变量的原始值。
\n\n代码:
\n\n(...)\ndata = Illumination.calculate_N(data)\ndata = Illumination.calculate_pi(data)\ndata = Illumination.calculate_kwh(data)\ndata = Illumination.calculate_ca(data) \n\nlet data_base = data\n\nlet ca_base = data.ca\nlet kwh_base = data.kwh\nlet pi_base = data.pi\n\n(...)\n\ndata = Illumination.calculate_N(data)\ndata = Illumination.calculate_pi(data)\ndata = Illumination.calculate_kwh(data)\ndata = Illumination.calculate_ca(data) \n\nlet data_proposto = data\n\nlet ca_proposto = data.ca\nlet kwh_proposto = data.kwh\nlet pi_proposto = data.pi\n\n-----------------------------------\nEXAMPLE:\nstatic calculate_ai(data){\n data.ai = data.areaTotal*data.au\n return data\n} \nRun Code Online (Sandbox Code Playgroud)\n\n预计原始变量(日期)的值将是 \xe2\x80\x8b\xe2\x80\x8bchanged,并且这种情况发生正确,但是,变量 data_base 和 data_proposto 没有保留其值
\n\n计算结束时两个变量具有相同的值 \xe2\x80\x8b\xe2\x80\x8bas 变量日期
\n\n变量 ca_proposto、ca_base 等正确存储其值 \xe2\x80\x8b\xe2\x80\x8b
\n\n任何想法?
\n\n变量 data_base 和 data_proposto 的唯一交互是它们与 data 变量的创建以及函数的返回 …
我的理解是,我可以使用指令 @Input() 将数据传递给子组件,并使用 @Output() 和适当的发射将数据发送回父组件。但我不知道 @Input() 字段中的更改数据会发送到父级。它是否正确?
我修改了组件通信工作簿以重现此https://input-params.stackblitz.io
你可以解释吗?
谢谢,
我需要一些帮助来理解NodeJ.我显然缺少一些基本的东西.我有一个类似于以下的模块,使用基本的显示模块模式...
var someArray = [];
var publicApi = {
someArray: someArray,
someFunction: someFunction
};
function someFunction() {
someArray = ['blue', 'green'];
}
module.exports = publicApi;
Run Code Online (Sandbox Code Playgroud)
当我使用这个模块时,someArray在我调用someFunction时没有改变...
var myModule = require('myModule');
myModule.someFunction();
var test = myModule.someArray;
// test is always an empty array
Run Code Online (Sandbox Code Playgroud)
请帮我理解原因.我意识到我可以使用构造函数来使用它,但我想填补我的知识,为什么以上不起作用.
更新:
我可以通过以下对模块的修改来实现这一点......
var theModule = {
someArray: [],
someFunction: someFunction
};
function someFunction() {
theModule.someArray = ['blue', 'green'];
}
module.exports = theModule;
Run Code Online (Sandbox Code Playgroud)
但我仍然想明白为什么第一个模块中的代码不起作用.我正在处理的模块很好,作为一个单例,所以我很想看看在模块中有变量的最佳实践是什么,可以通过该模块中的函数进行更改,并且可以在该模块之外公开访问.
javascript ×9
function ×2
node.js ×2
angular ×1
arrays ×1
closures ×1
jquery ×1
linked-list ×1
performance ×1
typeof ×1
typescript ×1