相关疑难解决方法(0)

什么是PHP或Javascript中的Closures/Lambda外行术语?

什么是PHP或JavaScript中的Closures/Lambda外行术语?一个例子对我的理解很有帮助.我在讨厌Lambda和Closures是一回事吗?

javascript php lambda closures

6
推荐指数
1
解决办法
1550
查看次数

如何访问"父"函数的参数?

例如,我有以下代码:

function a($param)
{
  function b()
  {
    echo $param;
  }
  b();
}
a("Hello World!");
Run Code Online (Sandbox Code Playgroud)

抛出E_NOTICE错误,因为$ param当然是未定义的(在b()中).

我无法将$ param传递给b(),因为b()应该是preg_replace_callback()的回调函数.所以我有想法在$ GLOBALS中保存$ param.

有没有更好的解决方案?

php functional-programming global-variables callback

6
推荐指数
1
解决办法
532
查看次数

Javascript类和变量引用

我正在努力解决这个难题的Javascript OOP问题.

所以我有以下课程:

var ClassA = function() {
    this.initialize();
}

ClassA.prototype = {

    methods : ['alpha','beta','gama'],

    initialize : function() {
        for ( var i in this.methods ) {
            this[this.methods[i]] = function() {
                console.log(this.methods[i]);
            }
        }
    }
}

var a = new ClassA();
Run Code Online (Sandbox Code Playgroud)

当我调用每个方法时,我希望打印出它的名字,对吧?但这是我得到的:

a.alpha(); // returns gama ?!?
a.beta();  // returns gama ?!?
a.gama();  // returns gama
Run Code Online (Sandbox Code Playgroud)

但是当我的班级看起来像这样:

var ClassB = function() {
    this.initialize();
}

ClassB.prototype = {

    methods : ['alpha', 'beta', 'gama'],

    initialize: function() {
        for ( var i …
Run Code Online (Sandbox Code Playgroud)

javascript

6
推荐指数
1
解决办法
459
查看次数

第三方页面上的JavaScript注入

我最近偶然发现了一个名为Overlay101的网站,它允许您为其他网站创建游览.

我很有兴趣看到他们用来加载第三方网站进行编辑的技术.

当您键入网站的地址时,它将作为overlay101.com网站的子域加载.

例如,如果我键入https://stackoverflow.com/questions/111102/how-do-javascript-closures-work- 它被加载为http://stackoverflow.com.www.overlay101.com/questions/111102/how-do-javascript-closures-work

我想知道如何实现子域创建,我在页面的源代码中看到了注入的JavaScript.我想知道这是怎么可能的.

最让我感兴趣的是Stackoverflow.com不允许在框架内加载页面 - 我想知道他们是如何设法加载页面的,以便可以添加游览弹出窗口.

javascript subdomain

6
推荐指数
1
解决办法
250
查看次数

延迟jquery的计时问题

这个问题是精心提炼的非异步函数版本,作为jQuery Deferred执行.

我们有2个jsfiddles:

  1. http://jsfiddle.net/XSDVX/1/ - 尽管调用了notify()函数,但不会触发progress事件.

  2. http://jsfiddle.net/UXSbw/1/ - 这里按预期触发进度事件.

唯一的区别是一行代码:

setTimeout(dfd.resolve,1);
Run Code Online (Sandbox Code Playgroud)

dfd.resolve();
Run Code Online (Sandbox Code Playgroud)

问题是:

  1. 当我们延迟解决时,如何捕获在此回调返回之前调用的.notify?想一想..then获取从它的第一个参数返回的延迟对象,并从中创建一个新的延迟对象,绑定到它完成的进度和失败事件.如果在返回deferred之前调用了notify,那么即使使用setTimeout,如何捕获它呢?(感谢/sf/users/28045811/询问此问题)

  2. 我可以摆脱setTimeout()并仍然有进展回调被解雇?

javascript jquery race-condition deferred jquery-deferred

6
推荐指数
1
解决办法
661
查看次数

在Javascript事件中引用的本地函数会发生什么?

我想我错过了关于javascript非常重要的事情

var gl = 10
$(document).ready(function() {
    var obj = {}
    obj.test = function() {
        gl++

        var lc = gl
        function y() {
            alert('local = ' + lc)
        }

        (function() {
            var k = lc + 1
            $('#button').click(function() {
                alert('local anonymous = ' + k)
                y()
            })                  
        })();

    }

    obj.test()
    $('#button').off()
    obj.test()          
})
Run Code Online (Sandbox Code Playgroud)

在上面的场景中,我定义了一个对象'obj',并为该对象创建了一个方法'test'.在方法内部,我有一个本地函数'y()',由附加到按钮的'click'事件使用.click事件也附加在匿名函数中.

然后我调用'test()',从按钮取消订阅'click'事件并再次调用'test()'.在结果中,我收到local = 12和local anonymous = 13.

但是我不明白javascript在内存中的作用,尤其是在每个步骤上运行'y()'和匿名函数.

我的具体问题如下,但如果您能解释整个流程,我将非常感激.

所以当我释放引用第一个'obj.test()'的所有事件时.在这种情况下,我猜这只是'点击'事件.javascript会破坏'obj.test()'范围和所有函数,包括匿名函数范围吗?我需要关心其他事情吗?

我的用例:我正在创建具有不同页面行为的动态页面加载,所以我想在全局对象方法中为每个页面分离javascript,并且一旦加载新页面,我想要分离上一页面的所有事件并调用行为功能.但是我突然意识到我并不真正理解javascript是如何工作的,并且这种方法可能存在巨大的内存泄漏.: - )

非常感谢!

javascript jquery jquery-mobile

6
推荐指数
1
解决办法
108
查看次数

CLASS中的自定义事件

我需要从CLASS启动自定义事件.我知道用DOM对象和jquery做这个,使用triggerHandler,比如$(object).. triggerHandler("inputChange",{param:X}); 问题是当我尝试使用类时,如下所示:

    var MyClass = (function(){

        var static_var = 1;

        var MyClass = function () {

            var privateVar;
            var privateFn = function(){ alert('Im private!'); };

            this.someProperty = 5;
            this.someFunction = function () {
                alert('Im public!');
            };
            this.say = function() {
                alert('Num ' + this.someProperty);
                $(this).triggerHandler("eventCustom");
            }
            this.alter = function() {
                this.someProperty ++;
            }
        };

        return MyClass;

    })();

    TheClass = new MyClass();

    $(TheClass).on('eventCustom', function() {
        alert('Event!');
    });

    TheClass.say();
Run Code Online (Sandbox Code Playgroud)

这不会启动警告或错误,但事件侦听器不起作用(或者不调度事件).我认为jQuery事件系统不适用于不是DOM对象,对吗?

启动事件的任何其他方式(我需要事件,而不是针对我的特定情况的回调)?

非常感谢!

javascript jquery

6
推荐指数
2
解决办法
1万
查看次数

了解事件处理程序的javascript闭包

我对javascript很新,最近在了解闭包时我遇到了一个问题,面试官问: -

function initButtons() {
    var body = document.body,
        button, i;

    for (i = 0; i < 5; i++) {
        button = document.createElement("button");
        button.innerHTML = "Button " + i;
        button.addEventListener("click", function (e) {
            alert(i);
        }, false);
        body.appendChild(button);
    }
}
initButtons();
Run Code Online (Sandbox Code Playgroud)

这段代码会输出什么?我回答了 - "对应于按钮的数字...... 1,2等"

好的,然后我用Google搜索并找到答案,其中说:

发生这种情况的原因是因为在for循环的每次迭代期间调用addEventListener方法时会创建一个闭包.

好的,现在一切都在我头顶......这怎么可能?坦率地说,我是一个愚蠢的JavaScript,并试图尽可能多地学习.所以,我要通过基础知识!

同时我也在阅读关于如何做javascript-closures-work的细节

javascript closures

6
推荐指数
2
解决办法
3145
查看次数

内部函数从外部获取参数

我不知道内部函数如何从.sort()方法传递参数.我知道.sort()传递值createComparisonFunction(),但它们如何最终在内部函数中?它只是从外部函数中获取任何未使用的参数吗?

我想了解这种行为.

    function createComparisonFunction(propertyName) {

        return function(object1, object2){
            var value1 = object1[propertyName];
            var value2 = object2[propertyName];

            if (value1 < value2){
                return -1;
            } else if (value1 > value2){
                return 1;
            } else {
                return 0;
            }
        };
    }

    var data = [{name: "Zachary", age: 28}, {name: "Nicholas", age: 29}];

    data.sort(createComparisonFunction("name"));
    alert(data[0].name);  //Nicholas

    data.sort(createComparisonFunction("age"));
    alert(data[0].name);  //Zachary     
Run Code Online (Sandbox Code Playgroud)

javascript

6
推荐指数
1
解决办法
91
查看次数

简单来说,thunk和高阶函数之间有什么区别?

我知道两者都是返回函数的函数.

到目前为止,我使用thunk的经验一直在使用它们返回函数而不仅仅是动作对象,这样我就可以使用异步请求Redux.

闭包是一个高阶函数(HOF)的实现,以便为私有变量创建一个新的范围......对吗?HOFs的其他例子包括map,reducefilter.

有没有其他明确定义两者之间差异的东西?

谢谢.

javascript functional-programming thunk higher-order-functions redux

6
推荐指数
2
解决办法
3003
查看次数