相关疑难解决方法(0)

一步定义和调用功能

有没有一种方法可以在Javascript中定义一个函数并立即调用它,以一种允许它重用的方式?

我知道你可以做一次性的匿名功能:

(function(i) {
    var product = i * i;
    console.log(product);
    // Can't recurse here because there's no (ECMA standard) way for the 
    // function to refer to itself
}(2)); // logs 4
Run Code Online (Sandbox Code Playgroud)

或者你可以命名一个函数然后调用它:

function powers(i) {
    var product = i * i;
    console.log(i * i);
    if (product < 1e6) { powers(product) };
}

powers(2); // Logs 4, 16, 256...
Run Code Online (Sandbox Code Playgroud)

但是,有一种更清晰的方法可以一次性定义和调用函数吗?有点像两个例子的混合?

不能做到这一点并不妨碍我做任何事情,但感觉它是一种很好的表达方式来编写需要运行的递归函数或函数,$(document).ready()但稍后当情况发生变化时等等.

javascript recursion functional-programming iife

50
推荐指数
4
解决办法
3万
查看次数

Javascript自执行功能"不是一个功能"

我有:

var Init = (function() {
   my js goes here
})();
Run Code Online (Sandbox Code Playgroud)

并且在加载页面时我的js正确执行.我也有:

$('form :checkbox').change(function() {
   Init();
});
Run Code Online (Sandbox Code Playgroud)

但是萤火虫说Init不是一个功能.

javascript iife

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

如何在JavaScript中调用自执行函数?

当我有一些代码时,我需要多次执行,我将它包装在一个函数中,所以我不必重复自己.有时需要在页面加载时最初执行此代码.现在我这样做:

function foo() {
   alert('hello');
}

foo();
Run Code Online (Sandbox Code Playgroud)

我宁愿这样做:

(function foo() {
   alert('hello');
})();
Run Code Online (Sandbox Code Playgroud)

问题是,这只会在页面加载时执行,但如果我尝试使用foo()它后续调用它将无法正常工作.

我猜这是一个范围问题,但有没有办法让自动执行函数在以后调用时工作?

javascript

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

如何简洁地分配并立即调用函数变量?

以下是在闭包中定义匿名函数,调用函数并忘记它的方法:

(function () { "do stuff"; })();
Run Code Online (Sandbox Code Playgroud)

这用于维持有限的范围而不向脚本添加批量(IIFE:立即调用的函数表达式).

如果您希望立即执行某个功能,同时仍保留该功能以供将来使用,如下所示:

var doThing;
(doThing = function () { "do stuff"; })();
Run Code Online (Sandbox Code Playgroud)

这适用于我测试的浏览器(Chrome,FF,IE8,IE10),但这不会传递JSLint(错误调用).这样做有兼容性问题吗?

是否有一种方法可以实现这一点,JSLint看起来很友好?

javascript function jslint iife

5
推荐指数
1
解决办法
3692
查看次数

Javascript中的高级构造

我在github上找到了一个有趣的项目,它在浏览器中处理pdf渲染.

我试着阅读代码,因为我对这个主题感兴趣,但我意识到我的javascript知识很差(不足).

有一些结构,如:

var Obj = (function() {
    function constructor(type, value) {
    this.type = type;
    this.value = value;
    }

    constructor.prototype = {
    };

    var types = [
    "Bool", "Int", "Real", "String", "Name", "Null",
    "Array", "Dict", "Stream", "Ref",
    "Cmd", "Error", "EOF", "None"
    ];

    for (var i = 0; i < types.length; ++i) {
    var typeName = types[i];
    constructor[typeName] = i;
    constructor.prototype["is" + typeName] =
    (function (value) {
     return this.type == i &&
     (typeof value == "undefined" || value == …
Run Code Online (Sandbox Code Playgroud)

javascript control-structure language-construct data-structures

3
推荐指数
1
解决办法
308
查看次数