相关疑难解决方法(0)

0
推荐指数
1
解决办法
184
查看次数

Javascript - 变量保留其价值有多深?

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)

javascript callback google-chrome-extension

0
推荐指数
1
解决办法
122
查看次数

是否可以在单个图层上放置多个KineticJS动画?

我有一个问题让我的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个图像时才能停止它.

javascript animation layer html5-canvas kineticjs

0
推荐指数
1
解决办法
1947
查看次数

javascript函数内部范围

请考虑以下代码:

function nepaliBuddha() {
    var a = 20;

    return function buddhaNepal() {
        console.log(a); 
    }
}

var closure = nepaliBuddha();

closure(); // logs 20
Run Code Online (Sandbox Code Playgroud)
  1. 现在当我们调用closure输出时20.这证明了内部范围property([[scope]])被分配给定义它的内部函数或声明时声明.如果没有在声明中分配,则无法记录20,因为它在不同的上下文中被调用

  2. 调用closure()函数上下文的作用域链是在函数调用时创建的,它由当前上下文的激活对象或VO以及[[scope]]此函数的内部属性组成.

  3. 调用还会创建[[scope]]属性,这意味着内部范围属性是在声明时创建的,也不是在执行时创建的?

  4. 通常,定义表示[[scope]]属性是在运行时或函数调用时创建的,但这不是真的,因为[[scope]]属性已经在声明中分配.

  5. 我认为[[scope]]属性可能会在执行函数后得到更新,是吗?请明确[[scope]]内部属性的定义.如何以及何时在申报时或执行时或两次创建.

javascript

0
推荐指数
1
解决办法
2241
查看次数

Javascript关闭冻结增量值的值

我很难理解和使用闭包(是的,我已经阅读了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不再是指目标.

javascript jquery closures

0
推荐指数
1
解决办法
187
查看次数

(function(){在Javascript中的含义

我想了解这段代码之间的区别:

(function() {
Run Code Online (Sandbox Code Playgroud)

而这段代码:

$(function() {
Run Code Online (Sandbox Code Playgroud)

第一个示例是否在文档就绪后运行代码,第二个示例是什么?或者仅仅是功能的范围,仅此而已?

javascript jquery document-ready deferred-execution

0
推荐指数
1
解决办法
2373
查看次数

如果我们想在currying中保留一个值,javascript的闭包是如何工作的

我写了代码

// 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我所做的每一个任务.

为什么这不起作用

javascript closures

0
推荐指数
1
解决办法
46
查看次数

Javascript跳过最后一个功能,忽略其他功能

所以我同意用他的一个小项目帮助一个朋友.制作一个简单的游戏,人们选择一个标记行,然后加载另一个.我已经完成了布局和一些功能,但它们都非常糟糕.

当我尝试添加第三阶段时,问题就出现了.很确定我遇到了某种内存泄漏,因为一切都开始乱了.我当前的迭代试图将函数分开,但不可否认,只有一个基本的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)

javascript jquery

0
推荐指数
1
解决办法
36
查看次数

将ES6类存储在变量中,并通过Object.Create实例化它

我目前需要通过变量将传递给动态调用其构造函数的函数,依此类推.简短的例子:

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)

javascript angularjs ecmascript-6

0
推荐指数
1
解决办法
1908
查看次数

JavaScript - 闭包

我正在阅读关于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 closures

0
推荐指数
1
解决办法
110
查看次数