我在Node.js应用程序中看到了一段JavaScript代码.
( function() { console.log("gg") } )(this)
Run Code Online (Sandbox Code Playgroud)
我想知道为什么使用=>(function(){})(this)这种类型的结构,以及如何编译.
我理解为什么我们有这两个方括号()(),以及为什么这个代码可以工作.
我怎样才能访问里面的一些变量
$(document).ready(function(){
var foo=0;
var bar = 3;
});
Run Code Online (Sandbox Code Playgroud)
来自谷歌Chrome控制台?如果我尝试alert(foo),我会收到一条消息,说明它没有定义.
我试图理解闭包,但实际上我能找到的闭包的每一个定义都使用了同样神秘而模糊的短语:" 关闭 ".
什么是关闭?" 哦,这是一个关闭另一个功能的功能. "
但我无处可寻找"结束"的含义.有人可以解释一下A对于"关闭"Thing B意味着什么吗?
我想使用长期持有的HTTP请求(Comet),ajax和websockets(取决于所使用的浏览器)来编写HTTP WebChat.用户数据库在mysql中.聊天是用PHP编写的,除了聊天流本身,也可以用javascript(node.js)编写:
我不想为每个用户启动一个php进程,因为没有好方法在这些php子进程之间发送聊天消息.所以我想在PHP或node.js中编写自己的套接字服务器应该能够处理超过1000个连接(聊天用户).作为一个纯粹的Web开发人员(php)我不太熟悉套接字,因为我通常让Web服务器关心连接.聊天消息不会保存在磁盘上或mysql中,而是保存在RAM中作为数组或对象以获得最佳速度.
据我所知,在单个php进程(套接字服务器)中无法同时处理多个连接,但是你可以接受大量的套接字连接并在循环中连续处理它们(读写;传入message - >写入所有套接字连接).问题是最大可能会有〜1000个用户的滞后,而mysql操作可能会减慢整个事情的速度,从而影响所有用户.
我的问题是:node.js可以处理性能更好的套接字服务器吗?Node.js是基于事件的,但我不确定它是否可以同时处理多个事件(不需要多线程吗?)或者是否只有一个事件队列.使用事件队列就像php:用户之后处理用户.
我还可以为每个聊天室(更少的用户)生成一个php进程,但是afaik还有单线程的IRC服务器,它们也能够处理数千个用户.(用c ++或其他语言编写)所以也许在php中也可以.
我更喜欢PHP而不是Node.js因为那时项目将只是php而不是编程语言的混合.但是,如果Node可以同时处理连接,我可能会选择它.
我正在使用Twitter Bootstrap 2.1.1和jQuery 1.8.1 的Typeahead组件
我试图从typeahead的updater函数中访问文本框元素.这是我目前的代码,效果很好:
$('#client-search').typeahead({
source: function (query, process) {
$.get(url, { query: query }, function (data) {
labels = [];
mapped = {};
$.each(data, function(i,item) {
mapped[item.label] = item.value;
labels.push(item.label);
});
process(labels);
});
}
,updater: function (item) {
$('#client-id').val(mapped[item]);
return item;
}
,items: 10
,minLength: 2
});
Run Code Online (Sandbox Code Playgroud)
我在同一页面上有很多预先搜索框.每个搜索框都有一个id #xxx-search和一个带id的相应隐藏输入#xxx-id.我想通过这样做来重复使用相同的代码:
$('#client-search, #endClient-search, #other-search').typeahead({
...
,updater: function (item) {
var target = $(this).attr('id').split('-')[0] + '-id';
$('#'+target).val(mapped[item]);
return item;
}
...
Run Code Online (Sandbox Code Playgroud)
我认为这this …
我是一名网络开发人员,但很多人都在寻找更高级的技能,理解闭包似乎是最重要的.
我得到了整个"执行上下文创建对一个永远不会被破坏的变量的引用"的东西,但实际上,这是JavaScript中的某种私有或静态变量实现吗?
我正在开发一个webapplication.我有一个谷歌地图,我从阵列中添加多边形.我遍历该数组并将多边形添加到地图中.我还需要为多边形单击添加一个事件监听器,并提醒多边形的位置
这就是我正在做的事情
map = new google.maps.Map(document.getElementById('map_canvas'),
mapOptions);
//Loop on the polygonArray
for (var i = 0; i < polygonArray.length; i++) {
//Add the polygon
var p = new google.maps.Polygon({
paths: polygonArray[i],
strokeWeight: 0,
fillColor: '#FF0000',
fillOpacity: 0.6,
indexID: i
});
p.setMap(map);
//Add the click listener
google.maps.event.addListener(p, 'click', function (event) {
//alert the index of the polygon
alert(p.indexID);
});
}
Run Code Online (Sandbox Code Playgroud)
问题
多边形都正确绘制.但问题是,当我尝试单击多边形时,它始终显示最后一个索引.它就像它只是点击添加的最后一个多边形.我想当我添加一个新的监听器时,它会覆盖旧的监听器.如何为添加的每个多边形添加侦听器以提醒正确的索引?
谢谢
如何理解Javascript中的闭包?
一般而言,闭包是绑定到一个或多个外部变量的函数.调用它时,该函数可以访问这些变量.在JavaScript中,当函数在另一个函数内声明时,通常会实现闭包.即使在父函数终止之后,内部函数也会访问父函数的变量
在这个语句中,"闭包是一个绑定到一个或多个外部变量的函数",这是否意味着我们可以这样做:var myFun = Function(msg){...};它是否正确?
什么意思"甚至在父功能终止后"?
我试图将我的头脑包裹在一些反应和它的工具中非常常见的箭头函数上.
给出以下示例:
export default function applyMiddleware(...middlewares) {
return (createStore) => (reducer, preloadedState, enhancer) => {
// snip actual enhancer logic
return {
...store,
dispatch
}
}
}
Run Code Online (Sandbox Code Playgroud)
用语言描述上述内容:
所以没有箭头,它看起来像这样:
export default function applyMiddleware(...middlewares) {
return function(createStore){
return function(reducer,preloadedState,enhancer){
//some logic
return{...store,dispatch}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题:
javascript ×8
closures ×5
jquery ×2
node.js ×2
callback ×1
chat ×1
console ×1
ecmascript-6 ×1
google-maps ×1
php ×1
polygon ×1
sockets ×1
syntax ×1
typeahead ×1