我对async.auto中从一个任务到另一个任务的结果逻辑感到困惑.例如,在下面的代码逻辑中,我向模型中添加了一些数据task1,这些数据最初是从模型的输出initialtask和finalTask添加的数据task1中反映出来的results.initialTask1.同样添加的数据task2反映在results.initialTask1中finalTask.
综上所有的results.initialTask1,results.task1[0],results.task2[0],results.task3[0]在相同的finalTask.这是逻辑async.auto吗?或者它是否像C++中的指针引用那样导致模型的任何变化task1,它也反映在模型中initialTask?
async.auto({
initialTask: function(callback) {
//Do some operations
callback(null, name, initialModels);
},
task1: ['initialTask', function(callback, results) {
var models = results.initialTask[1];
//Add some more data to models
callback(null, models);
}],
task2: ['initialTask', function(callback, results) {
var models = results.initialTask[1];
//Add some more data to …Run Code Online (Sandbox Code Playgroud) 当我创建一个react类的几个实例时(通过在同一个类上使用React.createElement),一些成员变量在实例之间共享(数组和对象是共享的,字符串和布尔值等等).
对我来说,这感觉太可怕,可怕和错误.这是一个错误还是有另一种方法可以做我想做的事情?
请看一下:http: //jsbin.com/kanayiguxu/1/edit?html,js,console,output
据我了解,Javascript通过引用传递对象,数组也是一个对象,但是当我创建一个整数数组然后将它传递给一个函数时,如下代码:
function testFunc(outTestArray) {
var aiTemp = [1,2,3,4];
/*Using slice(0) to clone array */
outTestArray = aiTemp.slice(0);
}
var aiTest = Array.apply(null, Array(4)).map(Number.prototype.valueOf, 0);
testFunc(aiTest);
console.log(aiTest.toString()); // aiTest still [0,0,0,0]
Run Code Online (Sandbox Code Playgroud)
我也知道 slice(0) 函数只返回数组的浅拷贝,但如果数组只是一个整数数组。所以我的问题是为什么aiTest的数据没有被修改?
.push()方法有以下问题:
var myArray = ["a", "b", "c", "d"];
function add(arr) {
arr.push("e");
return arr;
}
add(myArray);
// myArray is now ["a", "b", "c", "d", "e"]
Run Code Online (Sandbox Code Playgroud)
为什么它会覆盖myArray?无法理解......
我想将函数引用"go"传递给另一个函数"redefineFunction",并在"redefineFunction"中重新定义"go".根据Johnathan Snook的说法,函数是通过引用传递的,所以我不明白为什么go()在将它传递给redefineFunction()时没有重新定义.有什么东西我错过了吗?
// redefineFunction() will take a function reference and
// reassign it to a new function
function redefineFunction(fn) {
fn = function(x) { return x * 3; };
}
// initial version of go()
function go(x) {
return x;
}
go(5); // returns 5
// redefine go()
go = function(x) {
return x * 2;
}
go(5); // returns 10
// redefine go() using redefineFunction()
redefineFunction(go);
go(5); // still returns 10, I want it to return 15 …Run Code Online (Sandbox Code Playgroud) 我正在尝试检查格式mm.dd.yyyy的日期是否大于今天且小于今天6个月后的日期.
这是我的代码:
var isLinkExpiryDateWithinRange = function(value) {
var monthfield = value.split('.')[0];
var dayfield = value.split('.')[1];
var yearfield = value.split('.')[2];
var inputDate = new Date(yearfield, monthfield - 1, dayfield);
var today = new Date();
today = new Date(today.getFullYear(), today.getMonth(), today.getDate());
alert(inputDate > today);//alert-> true
var endDate = today;
endDate.setMonth(endDate.getMonth() + 6);
alert(inputDate > today);//alert-> false
if(inputDate > today && inputDate < endDate) {
alert('1');
} else {
alert('2');/always alert it
}
}
Run Code Online (Sandbox Code Playgroud)
如果我执行isLinkExpiryDateWithinRange('12.08.2012')我希望它将显示1,因为它在范围内,但它显示2.此外,第一个警报显示为真,第二个警告显示为假.
有人可以解释一下发生了什么吗?
我确信有一个简单的答案,虽然我只有PHP的经验.为什么"披萨"阵列在我将其传递给我的"my_pizza"功能时只会更改为"my_pizza"?如何将原始数组保存到函数外部的函数中?功能运行完毕后,披萨阵列应该没有改变.我注意到,如果我更改了我的字符串变量(pie),它将在函数运行后保持不变,与数组不同.
简而言之,我希望第一组结果与第二组完全相同.
var pizza = [];
pizza.push('crust');
pizza.push('ham');
var pie = "apple"
function bake_goods(my_pizza, my_pie){
console.log(my_pizza);
console.log(my_pie);
delete my_pizza['1'];
my_pie = "peach";
console.log(my_pizza);
console.log(my_pie);
}
//first run
bake_goods(pizza, pie);
//console logs
//['crust','ham']
//apple
//['crust']
//peach
//second run
bake_goods(pizza, pie);
//console logs
//['crust']
//apple
//['crust']
//peach
Run Code Online (Sandbox Code Playgroud) 我无法弄清楚通过引用传递和通过值传递的内容(我知道它们在理论上的含义).你能告诉我下面的函数是否通过值ore参考传递参数?BTW这是我的第一篇帖子:)
var number_1 = 32;
var number_2 = 43;
function addition(num1,num2) {
alert (num1*num2) ;
}
addition(number_1,number_2); /*is this passing by reference?*/
Run Code Online (Sandbox Code Playgroud) 我想影响数组中的所有项目.最终结果将是decodeURIcomponent每个项目.
它不适合我,所以我决定更改每个项目的值来检查代码.它没有改变任何东西.
有没有更好的方法来做到这一点,因为真正的嵌套$.each函数对我来说似乎有点多余.
$(function() {
var hResponse = [];
hResponse.push("firstName", "lastName", "location");
var columns = [];
columns.push({
"firstName": "Edward",
"lastName": "Dane",
"location": " Here"
}, {
"firstName": "Arthur",
"lastName": "Dee",
"location": "There"
}, {
"firstName": "Cherry",
"lastName": "Red",
"location": "OverHere"
});
$.each(columns, function (key, value) {
$.each(value, function (key1, value2) {
value2 = "Meeeeep";
//value2 = decodeURIComponent(value2);
});
});
$('#my-table').dynatable({
dataset: {
records: columns
}
});
});Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<link href="https://s3.amazonaws.com/dynatable-docs-assets/css/jquery.dynatable.css" rel="stylesheet"/>
<script src="https://s3.amazonaws.com/dynatable-docs-assets/js/jquery.dynatable.js"></script>
<table id="my-table"> …Run Code Online (Sandbox Code Playgroud)我正在关注一些画布教程.下面的代码是一个片段.
在这个片段中,他们为什么不选择runAnimation成为一个简单的布尔值?我认为该x = !x声明无论如何都会起作用,但是当我尝试更改代码以使用布尔时,代码不起作用.
那么,作为基元的布尔值和作为对象属性的布尔值之间的区别是什么?
/*
* define the runAnimation boolean as an object
* so that it can be modified by reference
*/
var runAnimation = {
value: false
};
// add click listener to canvas
document.getElementById('myCanvas').addEventListener('click', function() {
// flip flag
runAnimation.value = !runAnimation.value;
Run Code Online (Sandbox Code Playgroud) javascript ×10
arrays ×3
function ×2
asynchronous ×1
date ×1
html5-canvas ×1
jquery ×1
node.js ×1
range ×1
reactjs ×1
reference ×1
scope ×1