此问题已重做并更新.请原谅下面的过时参考.谢谢.
我最近看到很多javascript代码看起来对我不对.在这种情况下,我应该建议什么是更好的代码模式?我将重现我见过的代码和每个代码的简短描述:
此代码永远不应评估内部函数.程序员会感到困惑,因为代码应该运行.
$(document).ready( function() {
return function() {
/* NOPs */
}
});
Run Code Online (Sandbox Code Playgroud)
程序员可能打算实现自调用功能.他们没有完全完成实现(他们在()嵌套paren的末尾错过了一个.另外,因为他们没有在外部函数中做任何事情,嵌套的自调用函数可能只是内联到外部函数定义.
实际上,我不知道他们打算自我调用函数,因为代码仍然是错误的.但似乎他们想要一个自我调用功能.
$(document).ready( (function() {
return function() {
/* NOPs */
}
}));
Run Code Online (Sandbox Code Playgroud)
似乎程序员似乎正在尝试使用自调用功能.但是,在这种情况下,它是矫枉过正的.
$(document).ready( function() {
(return function() {
/* NOPs */
})()
});
Run Code Online (Sandbox Code Playgroud)
一个示例代码块
$('#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中的闭包?
一般而言,闭包是绑定到一个或多个外部变量的函数.调用它时,该函数可以访问这些变量.在JavaScript中,当函数在另一个函数内声明时,通常会实现闭包.即使在父函数终止之后,内部函数也会访问父函数的变量
在这个语句中,"闭包是一个绑定到一个或多个外部变量的函数",这是否意味着我们可以这样做:var myFun = Function(msg){...};它是否正确?
什么意思"甚至在父功能终止后"?
我正在玩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) 我在尝试将$ 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的新手,我看到了很多这样的语法:
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)
为什么依赖注入只适用于返回的函数?
我知道我真的很困惑,如果有人能帮助我,我会非常感激,谢谢大家,祝你有个美好的一天.
假设顶部窗口中有一个函数.例如:
function z() { alert(window.name); }
Run Code Online (Sandbox Code Playgroud)
我们还要说这个文档中有一个iframe(同源).
顶部窗口中的函数是否可以在另一个窗口的上下文中执行此函数,以便显示iframe的名称而不是顶部窗口?
换句话说,全局对象如何绑定到一个函数并且可以更改?
天真的尝试不起作用:https://jsfiddle.net/wos2o3gx/(显示两个调用的顶部).
我是节点和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) 我来自一个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) 我有问题..
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等...)
谢谢你的帮助
我的页面上散布了一些javascript片段 - 很多都包含在我自己的.js文件中,但是我在网上找到的一些东西直接放在页面上.
我不太熟悉javascript与页面的交互方式 - 添加内联脚本或添加对外部文件的引用是否有区别?