所以我同意用他的一个小项目帮助一个朋友.制作一个简单的游戏,人们选择一个标记行,然后加载另一个.我已经完成了布局和一些功能,但它们都非常糟糕.
当我尝试添加第三阶段时,问题就出现了.很确定我遇到了某种内存泄漏,因为一切都开始乱了.我当前的迭代试图将函数分开,但不可否认,只有一个基本的js类,我认为我只是不知道如何使这个工作.
我这里有一个小提琴.您可以在加载时看到它直接跳到第3阶段,即使这样也无法正常工作.我相信它编码为正确的答案"摇滚"闪烁绿色,但它仍然闪烁红色.
function resetFrame1 (){
$('#leftSide, #rightSide, #leftImage, #rightImage, #leftText, #rightText').fadeToggle(750).delay(1).css("background-color", "transparent");
callback();
}
function resetFrame2 (){
$('#leftSide, #rightSide, #leftImage, #rightImage, #leftText, #rightText').fadeToggle(750).delay(1).css("background-color", "transparent");
callback();
}
function end(){
//right now undefined since I can't get this to work at all.
}
function stageOne(){
var score = 0;
$('#leftText').text("Green Living. . . . . Easy!!!")
$('#leftImage').html("<img src=>");
$('#rightText').text("Burn Your Tires!");
$('#rightImage').html("<img src=>");
$('html').keyup(function(e){
if (e.which==97 || e.which==65){
score++;
$('#leftSide').css( "background-color", "green");
$('#leftSide').fadeToggle(1000).fadeToggle(2000).fadeToggle(1000).fadeToggle(2000, function(){
resetFrame1();
});
}
else if (e.which==76 || …Run Code Online (Sandbox Code Playgroud) 我想在一个循环中更改这段代码:请帮助我.
itemAll[0].addEventListener('click', function () {
klik(0)
}, false);
itemAll[1].addEventListener('click', function () {
klik(1)
}, false);
itemAll[2].addEventListener('click', function () {
klik(2)
}, false);
itemAll[3].addEventListener('click', function () {
klik(3)
}, false);
itemAll[4].addEventListener('click', function () {
klik(4)
}, false);
itemAll[5].addEventListener('click', function () {
klik(5)
}, false);
itemAll[6].addEventListener('click', function () {
klik(6)
}, false);
itemAll[7].addEventListener('click', function () {
klik(7)
}, false);
itemAll[8].addEventListener('click', function () {
klik(8)
}, false);
itemAll[9].addEventListener('click', function () {
klik(9)
}, false);
itemAll[10].addEventListener('click', function () {
klik(10)
}, false);
itemAll[11].addEventListener('click', function …Run Code Online (Sandbox Code Playgroud) 我目前需要通过变量将类传递给动态调用其构造函数的函数,依此类推.简短的例子:
class MyClass {
constructor ($q) {
console.log($q);
}
expose () {
return {};
}
}
const myclass = function () {
// My concern is this ------.
// I need to pass it |
// as a variable \|/
// '
let obj = Object.create(MyClass.prototype);
obj.constructor.apply(obj, arguments);
return {}; // other stuff goes here
};
myclass.$inject = ['$q'];
export {myclass};
Run Code Online (Sandbox Code Playgroud)
我的想法是将MyClass作为变量传递,以这种方式:
const myclass = function (classVariable) {
let obj = Object.create(classVariable.prototype);
obj.constructor.apply(obj, arguments);
return {}; // other …Run Code Online (Sandbox Code Playgroud) 我正在阅读关于Mozilla开发者网站上的闭包的解释,并且我正在苦苦挣扎.请查看Mozilla网站上的以下代码.我有点理解它是如何工作的,但我认为我的评论下面的代码也应该有效.如果点击18和20,为什么它不起作用?
/* mozilla dev code */
function makeSizer(size) {
return function() {
document.body.style.fontSize = size + 'px';
};
}
var size12 = makeSizer(12);
var size14 = makeSizer(14);
var size16 = makeSizer(16);
document.getElementById('size-12').onclick = size12;
document.getElementById('size-14').onclick = size14;
document.getElementById('size-16').onclick = size16;
/* end of mozilla dev example */
/* my code starts */
/* see - no inner function below */
function makeS(size) {
document.body.style.fontSize = size + 'px'
}
/* Let's see if that works */
var size18 = makeS(18); …Run Code Online (Sandbox Code Playgroud) 关于定义回调的位置,我遇到了一些混乱.
function test(){
var b = 3
var fun = function(){
var printingFunction = function(){
console.log(b)
}
printingFunction()
}
return fun
}
test()() //prints 3, as expected because of closures
Run Code Online (Sandbox Code Playgroud)
但是,以下不起作用
function test(){
var b = 3
var fun = function(cb){
cb()
}
return fun
}
test()(function(){console.log(b)}) //b is not defined
Run Code Online (Sandbox Code Playgroud)
我希望由于函数作为参数传递并且之前没有定义过,它的定义发生在'fun'中,因此它可以访问b.相反,它看起来很像函数首先在其传递的范围中定义,然后THEN作为参数传递.任何想法/指针?
编辑:一些额外的指针.
someFunction("a")
Run Code Online (Sandbox Code Playgroud)
我们不可能声称"a"是一个定义.这里隐含的是"a"被赋给由参数名称so命名的变量var argumentNameInDefintion = "a".这发生在someFunction的主体中.
同样,我们不能声称{}是一个定义:someFunction({}).那么为什么会:
someFunction(function(){})
决定这function(){}是一个超越我的定义.如果是的话
var a = function(){}
someFunction(a)
Run Code Online (Sandbox Code Playgroud)
一切都会很有道理.也许它只是语言的运作方式.
我想将参数传递给 Javascript 中的事件侦听器。我找到了解决方案,但我无法理解它们为什么或如何工作以及为什么其他解决方案不起作用。
我有 C/C++ 背景,但是 Javascript 函数的执行有很大不同。您能否帮助我理解以下示例如何以及为何有效或无效?
没有参数,代码可以正常工作:
var clicker = document.getElementById("mainNavToggle");
clicker.addEventListener("click", eventFunction);
function eventFunction()
{
console.log("works");
}
Run Code Online (Sandbox Code Playgroud)
如果我在 eventListener 上包含括号,该函数将在没有事件触发的情况下执行一次,然后不执行任何操作:
var clicker = document.getElementById("mainNavToggle");
clicker.addEventListener("click", eventFunction());
function eventFunction()
{
console.log("works");
}
Run Code Online (Sandbox Code Playgroud)
我想这是因为该函数是在 eventListener 处调用的,并且这不允许 eventListener 函数稍后调用 eventFunction。
当我想用 eventFunction 传递参数时。以下不起作用:
var clicker = document.getElementById("mainNavToggle");
clicker.addEventListener("click", eventFunction("works"));
function eventFunction(myStr)
{
console.log(myStr);
}
Run Code Online (Sandbox Code Playgroud)
它在不触发事件的情况下调用 eventFunction,然后当事件触发时不执行任何操作,这与之前的行为相同。到目前为止我想我能理解。
为了在事件函数中正确传递参数,我找到了以下代码。以下解决方案工作正常:
var clicker = document.getElementById("mainNavToggle");
clicker.addEventListener("click", eventFunction("works"));
function eventFunction(myStr)
{
function func(event, myStr)
{
console.log(myStr);
}
return function(event) {
func(event,myStr)
};
}
Run Code Online (Sandbox Code Playgroud)
我注意到的第一件事是这个 eventFunction …
我有这段代码
var o = {
f: function() {
console.log(this);
}
}
var o2 = {
h:function(m){m()}
};
o2.h(o.f)
Run Code Online (Sandbox Code Playgroud)
控制台打印 - >窗口
任何人都可以解释为什么我有窗户而不是o2?谢谢.
javascript ×8
closures ×3
angularjs ×1
dom-events ×1
ecmascript-6 ×1
for-loop ×1
jquery ×1
php ×1