我现在正在编写一些脚本,但在尝试否定函数内的布尔值时遇到了问题。我的意思是:
var test = true;
function changeThisBoolPlease(asd){
asd=!asd;
}
alert(test);
changeThisBoolPlease(test);
alert(test);
Run Code Online (Sandbox Code Playgroud)
警报为真,然后为真。
有任何想法吗?JS 引用不是很完美吗?
编辑:
好的,这只是我功能的一部分:
function przesun(kolor, figury, castlings, x1, y1, x2, y2, strona) {
kolor = nowaPozycjaKolor(kolor,x1, y1, x2, y2);
figury = nowaPozycjaFigur(figury,x1, y1, x2, y2);
strona = !strona;
}
Run Code Online (Sandbox Code Playgroud)
实际上我不能返回这个值。如何?
如果我有这样的对象:
obj = {a:{aa:1}, b:2};
Run Code Online (Sandbox Code Playgroud)
我想创建一个快捷变量(指向obj.a.aa的指针)x,如下所示:
x = obj.a.aa;
Run Code Online (Sandbox Code Playgroud)
然后我想使用x将值3分配给obj.a.aa,如下所示:
x = 3; // I would like for obj.a.aa to now equal 3
console.log(obj.a.aa); // 1 (I want 3)
Run Code Online (Sandbox Code Playgroud)
如何将x设置为导致值3进入obj.a.aa?
我知道obj.a.aa是一个原始的,但是如何定义一个指向它的变量,然后我可以使用它来为属性赋值?
在下面的JS代码中,为什么不将like didf3(arr2)的值更改为?有什么方法可以按预期工作(如果可能,不返回修改后的数组)?arr2f2(arr1)arr1f3
var arr1 = [1, 2, 3, 4];
var arr2 = [1, 2, 3, 4];
function f1() {
return [2, 3, 4, 5];
}
function f2(arr) {
arr.push(5);
}
function f3(arr) {
arr = f1();
}
f2(arr1);
console.log(arr1); // [ 1, 2, 3, 4, 5 ]
f3(arr2);
console.log(arr2); // [ 1, 2, 3, 4 ], expect [2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud) Mozilla说:
map不会改变调用它的数组(尽管回调,如果被调用,可能会这样做).
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
具体来说,回调传递的第三个参数是:
调用了数组映射.
我假设这意味着内存中的数组位置通过引用复制到回调中.
因此,通过改变第三个参数,我们应该改变原始数组,但是以下两个片段会产生相互矛盾的结果:
情况1,重新分配第三个参数没有改变原始数组:
var A = [1, 2, 3];
A.map((v,i,_A) => {
console.log("_A is the array map invoked on: ", _A===A); // true
_A = []; // reassign an empty array
return v;
});
console.log("'A' did not mutate:", A) // [1, 2, 3] did not mutateRun Code Online (Sandbox Code Playgroud)
情况2,将第三个参数设置为零长度会改变原始数组:
var B = [1, 2, 3];
B.map((v,i,_B) => {
console.log("_B is the array map invoked on: ", _B===B); // true
_B.length = 0; // clearing the array by …Run Code Online (Sandbox Code Playgroud)我需要一个全局变量“window.myHub”来设置它作为参数传递给函数(SignalRSetUp),如下所示:它现在传递的方式,没有设置它!这该如何解决呢?
var args = {
"userObjectId": UserObjectId,
"hubURL": LCSHubApiURL,
"hubName": HubProxyName,
};
var callBackFuncs = {
"ping": PingFunc
};
window.myHub;
var signalRSetUp = new SignalRSetUp(args,callBackFuncs, window.myHub);
Run Code Online (Sandbox Code Playgroud)
SignalRSetUp(argObj,eventFuncs,globalVar)
{
var $self = this;
var connection = $.hubConnection(argObj.hubURL);
var hub = connection.createHubProxy(argObj.hubName);
hub.connection.qs = { "objectid": argObj.userObjectId };
//Wire : Call back functions and the Hub events
for (var e in eventFuncs) {
hub.on(e, eventFuncs[e]);
//hub event fail
}
connection.start()
.done(function () {
globalVar = hub;
}).fail(function (error) {
console.log('Could not Connect!'); …Run Code Online (Sandbox Code Playgroud) 我做了一个工作的Plunker来测试一下.
我有一个ng-repeat,它只列出了小猫的名字和id.我还有一个输入表单来接收新猫咪的名字.然后,我有3个按钮,每个按钮访问一个不同的$ scope函数,它将以不同的方式操作$ scope.
每个函数的目标是从输入表单中读取 kitty 的名称,读取 kitties数组中使用的最后一个id,将id + 1分配给新kitty,将新kitty推送到kitty数组并删除表格数据.
第一个函数,$scope.addFullScope()将不会作为参数接收任何内容,并将从中读取和操作所有内容$scope.
第二功能,$scope.addJustDelete(kitty, kitties)将接收新的kitty和kitties阵列作为参数.但是,最后,为了清理表格,它会做$scope.kitty = undefined
第三个功能,$scope.addNoScope(kitty, kitties)将接收新的kitty和kitties阵列作为参数.但是,最后,为了清理表格,它会做kitty = undefined.但表格不会清理!一切都会出现问题.
附录:
HTML:
<body ng-app='app' ng-controller="ctrl">
<h3 ng-repeat="kitty in kitties">
{{kitty.name}}: {{kitty.id}} //Kitties list
</h3>
<input placeholder='Kitty …Run Code Online (Sandbox Code Playgroud) 我有一个'交易'对象,其中包含对orderBook.BTCUSDT的引用.我的目的是在orderBook.BTCUSDT改变时改变'交易'.
但是,更改orderBook.BTCUSDT不起作用.但改变orderBook.BTCUSDT.asks的确如此.
为什么?
orderBook = {'BTCUSDT': {'asks':[1,2,3,5], 'bids':[6,7,8,9]}};
trades = {"one": orderBook.BTCUSDT};
orderBook.BTCUSDT = 1234; // does not work
console.log(trades);
/* Output:
{
"one": {
"asks": [
1,
2,
3,
5
],
"bids": [
6,
7,
8,
9
]
}
}
*/
orderBook = {'BTCUSDT': {'asks':[1,2,3,5], 'bids':[6,7,8,9]}};
trades = {"one": orderBook.BTCUSDT};
orderBook.BTCUSDT.asks = 1234; // works
console.log(trades);
/* Output:
{
"one": {
"asks": 1234,
"bids": [
6,
7,
8,
9
]
}
}
*/Run Code Online (Sandbox Code Playgroud)
在Axiac和Artur回复之后编辑
在阅读了Axiac和Artur的回复之后,我找到了另一种提问的方法.为什么第一个代码块工作但不是第二个?为什么我必须使用"价格"为对象添加另一个级别?似乎两者都试图做同样的事情(用另一个对象替换一个对象,但保留引用),只是在不同的级别.
orderBook = {BTCUSDT: { …Run Code Online (Sandbox Code Playgroud)当我们在函数中将obj2分配给obj1时,按引用传递不起作用,在函数外部它不起作用并且obj1保留其原始值,但是为什么呢?
let obj1 = {
value: 'a'
}
let obj2 = {
value: 'b'
}
obj3 = obj2;
function change(obj1, obj2) {
obj1 = obj2
obj2.value = 'c'
}
change(obj1, obj2);
console.log(obj1.value)Run Code Online (Sandbox Code Playgroud)
我正在看John Resig网站上的这段代码.我不明白的是当忍者对象被设置为空对象时,yell方法仍然可供武士使用.
是因为因为忍者周围还有一个参考,所以它不是垃圾收集的吗?
var ninja = {
yell: function(n){
return n > 0 ? yell(n-1) + "a" : "hiy";
}
};
var samurai = { yell: ninja.yell };
ninja = {};
console.log(samurai.yell(2)); //hiy
Run Code Online (Sandbox Code Playgroud)
http://ejohn.org/apps/learn/#14 (原始来源,我修改了一点以删除命名函数表达式).
根据这个问题,如果我将全局变量作为参数传递给函数,则该全局变量将成为本地副本。
如果是这样,为什么这个 jfiddle 的行为方式如此?警报dog, cat不应该显示而不仅仅是显示cat吗?
我什至比示例更进一步,专门将全局变量复制到局部变量中,但结果是一样的。我真的很希望能够shift()在保持全局完整的同时进行本地化。