我把这段代码剪掉了.我得到a了undefined.这不应该显示父函数中传递的参数值吗?
function test(a) {
return function(a) {
console.log('a is : ' + a); // Output: a is undefined
}();
}
test('A should not be undefined? ');
Run Code Online (Sandbox Code Playgroud) 我的代码看起来像这样:
var a = [];
for(var i = 0; i < 10; i++) {
a[i] = function() {
console.log(i);
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,它似乎i是通过引用传递的,所以a输出10中的所有函数.如何使每个函数输出i创建它时的值?即a[0]()给出0,a[1]()给出1等.
编辑:澄清,我不想a存储值0-9.我想a存储返回值0-9的函数.
假设我声明了fooready函数中调用的变量.通常,当函数结束时,会删除本地声明的变量吗?
我想在事件监听器中使用这个变量#someid.我试过这个,foo当发生点击事件时,仍然可以访问该变量#someid.
当ready函数结束时,为什么这个变量不会被破坏并且仍然可以访问?声明变量并以这种方式使用它是否安全?我不想全局声明变量,因为我没有.
编辑:这些事件监听器及其变量存储在哪里?
这是我的js:
$(document).ready(function() {
var foo = 0;
//random event listener
$('#someId').on('click', function() { foo++; }); //increment foo
});
Run Code Online (Sandbox Code Playgroud) 我一直在努力理解以下代码:
var add = (function () {
var counter = 0;
return function () {return counter += 1;}
})();
add();
add();
add();
Run Code Online (Sandbox Code Playgroud)
这里add分配了匿名自调用函数的返回值 - 即函数function() { return counter += 1 }.现在第一次add()被调用它1按预期返回.但第二次add()称它返回2.
我的问题是因为counter在函数内定义所以不是每次函数完成执行counter都应该死掉?也就是说,在第一次调用add()1之后将显示.现在我们已经不在那个函数中,所以不应该counter忘记它以前的值并且像automatic变量一样从堆栈中销毁?
我有两个 javascript 文件,其中的变量具有相同的名称,我如何定义使用哪一个?
我几天前进入了js.我开始玩新功能和事件,但我被困在这里
var str = ["A", "b", "c", "d", "e"];
function Generate() {
var text = document.getElementById("text");
var countStr = 0;
text.innerHTML = str[countStr];
countStr += 1;
}Run Code Online (Sandbox Code Playgroud)
<div id="quote">
<p id="text">I'm a paragraph</p>
</div>
<button id="butt" onclick="Generate()">Generate</button>Run Code Online (Sandbox Code Playgroud)
当我单击按钮时,文本变为str [0]但是当我再次单击时它不会改变; 你能告诉我为什么吗 ?
显然我的jquery函数没有定义.我不知道为什么.我在脚本文件之前调用jquery,所以不是这样,jquery在我把它放入函数之前工作正常.
(function ($) {
function selectCharacter(){
$('select.character_select').change(function(){
alert('Select field value has changed to' + $('select.character_select').val());
});
}
})(jQuery);
selectCharacter();
Run Code Online (Sandbox Code Playgroud) 我正在从 JSON 数组中提取数据并从中创建对象,并在我使用for循环创建的对象中从数组中设置我需要的字符串值:
var gamesList = [];
gamesList = this.props.navigation.state.params.gamesList;
var gameIconList = [];
for(var i=0;i<3;i++){
var provider = gamesList[i].provider;
var gameId = gamesList[i].gameId.toString();
gameIconList.push(
<TouchableOpacity onPress={(provider,gameId) => this.launchGame(provider,gameId)}>
<ResponsiveImage source={{uri: gamesList[i].imageUrl}}
initWidth="200" initHeight="120" defaultSource={require('./splash-tile2.png')} />
</TouchableOpacity>
);
}
Run Code Online (Sandbox Code Playgroud)
这一切都发生在render()函数中,{gameIconList}将在return()函数中调用,如下所示:
return(
<ScrollView horizontal={true}>
{gameIconList}
</ScrollView>
);
Run Code Online (Sandbox Code Playgroud)
如您所见,我通过循环将字符串值设置到 onPress 函数调用中,当我单击图像中的图像时,TouchableOpacity我希望将设置的字符串值发送回上面的函数,即:
launchGame = (provider, gameId) => {
params = {
Provider: provider.nativeEvent.text,
Platform: this.state.Platform,
Environment: this.state.Environment,
GameId: gameId,
IsDemo: this.state.IsDemo
};
request …Run Code Online (Sandbox Code Playgroud) 在setInterval中调用时,我无法理解函数范围.
当我在setInterval中直接声明一个匿名函数时,如下所示:
let lastEventUUID = "some ID";
const interval = setInterval(async function() {
console.log("lastEventUUID -> " + lastEventUUID);
lastEventUUID = "another ID";
}, 1000);Run Code Online (Sandbox Code Playgroud)
我得到的一切都按预期工作
lastEventUUID -> some ID
lastEventUUID -> another ID
...
Run Code Online (Sandbox Code Playgroud)
但是当我分开宣布我的功能时
async function myFunc(lastEventUUID) {
console.log("lastEventUUID -> " + lastEventUUID);
lastEventUUID = "another ID";
}Run Code Online (Sandbox Code Playgroud)
并将调用设置为setInterval:
let lastEventUUID = "some ID";
const interval = setInterval(myFunc, 1000, lastEventUUID);
Run Code Online (Sandbox Code Playgroud)
我lastEventUUID没有在下次通话中更新
lastEventUUID -> some ID
lastEventUUID -> some ID
...
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么?
javascript ×9
function ×2
jquery ×2
variables ×2
arrays ×1
button ×1
closures ×1
events ×1
html ×1
lifetime ×1
react-native ×1
reactjs ×1
setinterval ×1
state ×1
var ×1