我试图将函数范围传递给回调方法.我遇到的问题是我得到了对象范围,它不能让我访问原始函数中的参数和局部变量.除了本地声明的变量和参数之外,我对"this"的理解意味着当前上下文(无论是窗口还是某个对象).[引用Richard Cornford在http://jibbering.com/faq/notes/closures/关于"执行上下文"部分的出色工作].我也理解JavaScript中的变量具有函数作用域(如果它们在函数内声明,则只能从该函数中访问它们).
有了这样的理解,在一个新的环境中,我试图编写一个模式,我为我以前的雇主做了很多,调用异步方法,指定一个回调处理程序并传递我的当前范围,期望它在回调方法中可用.我不认为在我目前的环境中就是这种情况.(披露:我在以前的环境中使用ExtJS ......让我觉得现在我觉得我对框架有点过于惬意,对正在发生的事情作出假设).
我的简单测试代码演示了我正在尝试做什么和什么不起作用.
function myHandler(data, ctx) {
console.log('myHandler(): bar: ' + bar); // <- prob: bar undefined
console.log(JSON.stringify(data));
}
MySvcWrap = {
doWork: function(p1, callback, scope) {
var result = {colors: ['red', 'green'], name:'Jones', what: p1};
if (callback) {
callback.call(scope||this,result, scope);
}
}
}
function lookup() {
var bar = 'food'; // local var
MySvcWrap.doWork('thang', myHandler, this); // scope object is this
}
lookup();
Run Code Online (Sandbox Code Playgroud)
这里的问题是传递给MySvcWrap.doWork的'this'在这种情况下是Window全局对象.我的目的是将函数的执行上下文传递给myHandler.
我试过了什么 如果,而不是'this',我传递一个对象,这是有效的,例如:
function myHandler(data, ctx) {
console.log('myHandler(): …Run Code Online (Sandbox Code Playgroud) 诺布在这里.在linux上,我安装了meteor,试图加载'todos'应用程序,得到了这个错误.它似乎与文件系统监控有关?我错过了包裹或烫发吗?我用sudo安装了meteor,但我安装了'todos'作为我的基本用户.
提前致谢!
~$ mkdir meteorDev
~$ cd meteorDev/
~/meteorDev$ meteor create --example todos
todos: created.
To run your new app:
cd todos
meteor
~/meteorDev$ cd todos/
~/meteorDev/todos$ meteor
[[[[[ ~/meteorDev/todos ]]]]]
Running on: http://localhost:3000/
fs.js:663
throw errnoException(errno, 'watch');
^
Error: watch EMFILE
at errnoException (fs.js:636:11)
at FSWatcher.start (fs.js:663:11)
at Object.watch (fs.js:691:11)
at [object Object]._scan (/usr/lib/meteor/app/meteor/run.js:322:12)
at Array.forEach (native)
at Function.<anonymous> (/usr/lib/meteor/app/lib/third/underscore.js:76:11)
at new <anonymous> (/usr/lib/meteor/app/meteor/run.js:264:5)
at /usr/lib/meteor/app/meteor/run.js:455:17
at /usr/lib/meteor/app/meteor/run.js:512:5
at /usr/lib/meteor/app/meteor/run.js:570:9
Run Code Online (Sandbox Code Playgroud) Golang noob问题:为什么我不能"%+v"在String()实现方法中使用该结构的标志?
我有一个结构,我想实现一个String()漂亮的打印方法.我喜欢这里给出的答案,但我不喜欢键入,所以我试图修改它以使用"%+v"结构的格式标志返回一个字符串.来自fmt doc:
%v打印结构时默认格式的值,加号标志(%+ v)添加字段名称
如果我简单地调用它,这可以正常工作fmt.Printf("%+v", color),但如果我尝试将+标志放在String()实现中,我会得到堆栈溢出(我第一次在stackoverflow.com上询问"堆栈溢出"问题;))
我确定我不理解这里的指针引用,或者有一些递归.我怀疑这个菜鸟找到了我的第一个Golang虫子,所以有人可以解释一下吗?
请参阅此处的播放演示https://play.golang.org/p/13_qI8Iwwa