Noob问题在这里.请参阅下面的代码.我在哪里可以阅读更多内容?我的意思是,this_variable得到100.所有后来定义的函数似乎都能够访问这个变量并获得它的价值,但是我想知道它有多深?我正在研究Chrome扩展程序,该死的东西只适用于回调; 我需要能够在一个非常深层嵌套的回调中访问内容,我需要确保我写的内容是可靠的并且将保持一致.
(function(){
this_variable = 100;
(function(){
(function(){
(function(){
(function(){
(function(){
tadaaa = this_variable;
console.log(tadaaa); // sais 100
}());
}());
}());
}());
}());
}());
Run Code Online (Sandbox Code Playgroud) 我有一个问题让我的KineticJS动画停止().
我在同一层上有三个KineticJS图像对象,我已经为每个KineticJS图像对象添加了一个KineticJS动画.但是,只有一个图像对象显示任何动画.它也不会停止响应anim.stop()的动画,除非我停止()所有三个对象(包括那些实际上没有视觉动画的动画)的动画.
我的问题是:是否可以在单个图层上添加多个独立动画到单个图层,并且仍能够单独启动()/停止()每个动画?或者我是否需要为每个KineticJS图像对象创建单独的图层?
简而言之(黑客版本),我的代码如下:
stage = new Kinetic.Stage({container: "container", width: windowWidth, height: windowHeight});
layer = new Kinetic.Layer();
var kinObjArr = [];
for (var i=0; i < 3; i++) {
kinObjArr[i] = new Kinetic.Image({image: myHTMLImage});
kinObjArr[i].anim = new Kinetic.Animation({
func: function(frame) {
kinObjArr[i].setX(30 * Math.sin(frame.time * 2 * Math.PI / 500) + 100);
},
node: layer
});
kinObjArr[i].anim.start();
kinObjArr[i].on('touchstart', function(){
this.anim.stop(); // <----- Doesn't stop
layer.draw();
});
} // for
stage.add(layer);
Run Code Online (Sandbox Code Playgroud)
基本上只有列表中的最后一个KineticJS图像将被动画化,并且只有在触摸/点击所有3个图像时才能停止它.
请考虑以下代码:
function nepaliBuddha() {
var a = 20;
return function buddhaNepal() {
console.log(a);
}
}
var closure = nepaliBuddha();
closure(); // logs 20
Run Code Online (Sandbox Code Playgroud)
现在当我们调用closure输出时20.这证明了内部范围property([[scope]])被分配给定义它的内部函数或声明时声明.如果没有在声明中分配,则无法记录20,因为它在不同的上下文中被调用
调用closure()函数上下文的作用域链是在函数调用时创建的,它由当前上下文的激活对象或VO以及[[scope]]此函数的内部属性组成.
调用还会创建[[scope]]属性,这意味着内部范围属性是在声明时创建的,也不是在执行时创建的?
通常,定义表示[[scope]]属性是在运行时或函数调用时创建的,但这不是真的,因为[[scope]]属性已经在声明中分配.
我认为[[scope]]属性可能会在执行函数后得到更新,是吗?请明确[[scope]]内部属性的定义.如何以及何时在申报时或执行时或两次创建.
我很难理解和使用闭包(是的,我已经阅读了JavaScript闭包如何工作?)
我的问题如下:
for (row = 0; row < 10; row++) {
for (column = 0; column < 10; column++) {
var target = $("#" + Data.Row[row].Column[column].ID);
target.mouseenter(function () {
var position = CalculatePosition($(this));
alert("row:" + row + ",column:" + column);
...
});
}
}
Run Code Online (Sandbox Code Playgroud)
正如您所料,只要目标将鼠标悬停在其上,行和列始终为9.我的问题是,如何冻结行和列的值,以便mouseevent匿名函数可以获得其预期值?我试过做类似的事情
target.mouseenter(function() {}.bind(column));
Run Code Online (Sandbox Code Playgroud)
这似乎只适用于专栏,但当然this不再是指目标.
我想了解这段代码之间的区别:
(function() {
Run Code Online (Sandbox Code Playgroud)
而这段代码:
$(function() {
Run Code Online (Sandbox Code Playgroud)
第一个示例是否在文档就绪后运行代码,第二个示例是什么?或者仅仅是功能的范围,仅此而已?
我写了代码
// Handlers
function successHandlerFactory (savedFlag) {
return function (res, savedFlag){
if (res.data && res.status == 200) {
ngcoupon_offerManager.addOffers(res.data.offers, -1, savedFlag);
console.log('offers response', res, 'savedFlag', savedFlag);
} else {
console.error('something is wrong to get offers', res);
}
}
};
var offerSuccessHandler = function() {
return successHandlerFactory();
}();
var savedofferSuccessHandler = function () {
return successHandlerFactory(true);
}();
Run Code Online (Sandbox Code Playgroud)
但显然它给出了savedFlag undefined我所做的每一个任务.
为什么这不起作用
所以我同意用他的一个小项目帮助一个朋友.制作一个简单的游戏,人们选择一个标记行,然后加载另一个.我已经完成了布局和一些功能,但它们都非常糟糕.
当我尝试添加第三阶段时,问题就出现了.很确定我遇到了某种内存泄漏,因为一切都开始乱了.我当前的迭代试图将函数分开,但不可否认,只有一个基本的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) 我目前需要通过变量将类传递给动态调用其构造函数的函数,依此类推.简短的例子:
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) javascript ×10
closures ×3
jquery ×3
angularjs ×1
animation ×1
callback ×1
ecmascript-6 ×1
html5-canvas ×1
kineticjs ×1
layer ×1