相关疑难解决方法(0)

现在javascript匿名函数中的`return function()`有什么用?(最佳实践)

注意:已更新并已重写

此问题已重做并更新.请原谅下面的过时参考.谢谢.

我最近看到很多javascript代码看起来对我不对.在这种情况下,我应该建议什么是更好的代码模式?我将重现我见过的代码和每个代码的简短描述:

代码块#1

此代码永远不应评估内部函数.程序员会感到困惑,因为代码应该运行.

$(document).ready( function() { 
  return function() { 
    /* NOPs */
  }
});
Run Code Online (Sandbox Code Playgroud)

代码块#2

程序员可能打算实现自调用功能.他们没有完全完成实现(他们在()嵌套paren的末尾错过了一个.另外,因为他们没有在外部函数中做任何事情,嵌套的自调用函数可能只是内联到外部函数定义.

实际上,我不知道他们打算自我调用函数,因为代码仍然是错误的.但似乎他们想要一个自我调用功能.

$(document).ready( (function() { 
  return function() { 
    /* NOPs */
  }
}));
Run Code Online (Sandbox Code Playgroud)

代码块#3

似乎程序员似乎正在尝试使用自调用功能.但是,在这种情况下,它是矫枉过正的.

$(document).ready( function() { 
  (return function() { 
    /* NOPs */
  })()
}); 
Run Code Online (Sandbox Code Playgroud)

代码块#4

一个示例代码块

$('#mySelector').click( function(event) { 
  alert( $(this).attr('id') );

  return function() { 
    // before you run it, what's the value here?
    alert( $(this).attr('id') );
  }
});
Run Code Online (Sandbox Code Playgroud)

评论:

我想我只是感到沮丧,因为它会导致人们不理解的蠕变错误,改变范围,他们不会徘徊,并且通常会产生非常奇怪的代码.这一切都来自某些教程吗?如果我们要教人们如何编写代码,我们能以正确的方式教他们吗?

您会建议哪些准确的教程向他们解释为什么他们使用的代码不正确?你建议他们学习什么模式?


我见过的所有样本都让我问这个问题已经问过了.这是我遇到的最新特定代码段,展示了这种行为.您会注意到我没有发布问题的链接,因为用户似乎非常新手.

$(document).ready(function() {
 $('body').click((function(){
  return function()
  { …
Run Code Online (Sandbox Code Playgroud)

javascript

16
推荐指数
1
解决办法
5842
查看次数

如何理解Javascript中的闭包?

如何理解Javascript中的闭包?

一般而言,闭包是绑定到一个或多个外部变量的函数.调用它时,该函数可以访问这些变量.在JavaScript中,当函数在另一个函数内声明时,通常会实现闭包.即使在父函数终止之后,内部函数也会访问父函数的变量

在这个语句中,"闭包是一个绑定到一个或多个外部变量的函数",这是否意味着我们可以这样做:var myFun = Function(msg){...};它是否正确?

什么意思"甚至在父功能终止后"?

javascript closures

16
推荐指数
2
解决办法
897
查看次数

参数...不是函数,未定义

我正在玩AngularJS,但我收到一条错误消息:Argument 'Controller' is not a function, got undefined这是JSFiddle和HTML代码:

<h2>Hata's Tree-Like Set</h2>
<div ng-app ng-init="N=3;" ng-controller="Controller">
<input type="range" min="1" max="10" step="1" ng-model="N">  
<div class="tree"></div>
</div
Run Code Online (Sandbox Code Playgroud)

然后我Controller在JavaScript中定义函数,由于某种原因没有注册.

function Controller($scope){
$scope.$watch("N", function(){  ... });}
Run Code Online (Sandbox Code Playgroud)

javascript angularjs

15
推荐指数
4
解决办法
5万
查看次数

在控制器中向函数注入$ http和$ scope

我在尝试将$ scope和$ http注入控制器时提出了类似的问题.无法在Angular.js控制器中调用未定义的方法'jsonp'.现在我试图通过将代码移动到控制器内的函数来稍微重构该代码.我遇到类似的问题,似乎无法掌握Angular中依赖注入的机制.以下是我的新代码.$ scope和$ http都是未定义的.我尝试做的是在didSelectLanguage()触发时发出一个http请求,并将结果数据分配给来自父控制器的$ scope中的"image"变量.有人可以告诉我在这个例子中依赖注入应该如何工作?

angular.module('myApp.controllers', []).

  controller('ImagesCtrl', ['$scope', '$http', function ($scope, $http) {



        $scope.didSelectLanguage=function($scope, $http) {
            console.log($scope);
            $http.jsonp('http://localhost:3000/image?quantity=1&language='+this.language+'&Flag=&callback=JSON_CALLBACK')
            .success(function(data){
            $scope.image = data;
            });

        }

  }])
Run Code Online (Sandbox Code Playgroud)

angularjs

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

Angularjs自定义过滤器和依赖注入

我是AngularJS的新手,我看到了很多这样的语法:

function someFunc(){
   return function(input){
    return 'hello' + input;
  }
}
Run Code Online (Sandbox Code Playgroud)

上面的函数是一个通用的语法,我倾向于看到很多,但问题是针对自定义过滤器的这个示例:

angular.module('bookFilters', [])
    .filter('newBookFilter', function(){
          return function(input){
        return 'The Book: ' + input.name + 'is new !';
   };
});
Run Code Online (Sandbox Code Playgroud)

我知道用另一个函数包装函数让我有机会使用依赖注入,这是我的问题:

过滤器是否从包装函数返回函数?那么它是否能够使用依赖注入将值注入函数?从理论上说:

这段代码:

{{bookObj | newBookFilter}}
Run Code Online (Sandbox Code Playgroud)

会变成:

{{   bookObj | function(input){return 'The Book: ' + input.name + 'is new !'; }  }}
Run Code Online (Sandbox Code Playgroud)

最后,{{}}将返回函数的最终值.

为什么我不能只注入input第一个函数,如:

angular.module('bookFilters', [])
         .filter('newBookFilter', function(input){
             return 'The Book: ' + input.name + 'is new !';
     });
Run Code Online (Sandbox Code Playgroud)

为什么依赖注入只适用于返回的函数?

我知道我真的很困惑,如果有人能帮助我,我会非常感激,谢谢大家,祝你有个美好的一天.

javascript code-injection angularjs

15
推荐指数
2
解决办法
3万
查看次数

在不同窗口的上下文中执行一个函数?

假设顶部窗口中有一个函数.例如:

function z() { alert(window.name); }
Run Code Online (Sandbox Code Playgroud)

我们还要说这个文档中有一个iframe(同源).

顶部窗口中的函数是否可以在另一个窗口的上下文中执行此函数,以便显示iframe的名称而不是顶部窗口?

换句话说,全局对象如何绑定到一个函数并且可以更改?

天真的尝试不起作用:https://jsfiddle.net/wos2o3gx/(显示两个调用的顶部).

javascript dom

15
推荐指数
2
解决办法
1115
查看次数

在推送对象时,Array.push()使所有元素都相同

我是节点和javascript的新手,并且一直在敲打以下内容.我创建了一个对象如下:

var Subscriber = {
'userID': String,
'email': String,
'name': String,
'stage': String,
'poster': Boolean,
'canEmail': Boolean,
'stage': String, }
Run Code Online (Sandbox Code Playgroud)

我有一个函数,我查询mongodb,并循环结果,尝试加载一组订阅者,我已声明为:

var s = Subscriber;
var subscribers = [];
Run Code Online (Sandbox Code Playgroud)

循环看起来像这样:

//load array of users that are subscribed to the group
        async.forEach(g.subscribers, function(item, callback) {     
            //load user document for this user
            User.findOne({ _id: item}, function(err, u) {
                if(!err && u) {                 
                    //var s = new Subscriber();
                    console.log('Sub load, found user %s, building array item', u.email);
                    console.log('Subs @ loop start');
                    console.log(util.inspect(subscribers));

                    console.log('Heres …
Run Code Online (Sandbox Code Playgroud)

javascript node.js

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

匿名函数范围内?

我来自一个Actionscript背景和(很晚才到派对)我正在努力学习JavaScript.我正在浏览这个AngularJS - YouTube上的初学者视频教程(非常好),看到一些我不理解的基本内容.

在第5行var workcount定义.然后定义两个匿名函数并在对象中返回.函数引用workcount但不在workcount不同的范围内?这是blocks在Objective-C中,在块内可以访问本地变量.这是什么名字?

或者,如果函数"知道"先前在其范围内定义的变量,那么函数是否task2"知道" task1

让我感到困惑的是我无法理解这一点.

更新:感谢所有回复.我现在明白了 - 虽然之前我已经看过"封闭"一词,但我从未理解它(它似乎不是一个非常具有描述性的术语.在阅读中,我看到了"叠帧"一词,然后灯泡点亮了:stack ...参考框架);


var createWorker = function(){

  var workCount = 0;

  var task1 = function(){
    workCount += 1;
    console.log("task1" , workCount);
  };

  var task2 = function(){
    workCount += 1;
    console.log("task2" , workCount);
  };

  return {
    job1: task1,
    job2:task2
  }
};

worker=createWorker();

worker.job1();

worker.job2();
Run Code Online (Sandbox Code Playgroud)

输出:

task1 1
task2 2
Run Code Online (Sandbox Code Playgroud)

javascript

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

jquery ajax()async false

我有问题..

for(a=1;a<10;a++){
    $(".div").append("<div id="+a+"></div>")
        $.ajax({
              url: "file.php",
              data: "a="+a,
              type: "POST",
              async: false,
              success: function(data) {
                $("#"+a).html(data);
              }
        });

}
 $("div").click(function(){
        alert("it works");
 });
Run Code Online (Sandbox Code Playgroud)

问题是:是我没有把有async: false从数据file.php仅在最后一个div所以id为9,但现在有async: false-所以数据在每一个div中是好的

但是,如果我想通过ajax加载时点击它不起作用(仅在完成所有ajax-es之后)

怎么解决这个问题?(也许错误的是我使用的是ajax.我可以使用getJSON等...)

谢谢你的帮助

ajax jquery asynchronous

13
推荐指数
1
解决办法
7万
查看次数

Javascript - 内联vs外部脚本 - 有什么区别?

我的页面上散布了一些javascript片段 - 很多都包含在我自己的.js文件中,但是我在网上找到的一些东西直接放在页面上.

我不太熟悉javascript与页面的交互方式 - 添加内联脚本或添加对外部文件的引用是否有区别?

javascript

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