在chrome开发工具中调试带有词法作用域(闭包)的angularjs指令时的奇怪行为
strange behavior when debugging angularjs directives with lexical scoping (closure) in chrome dev tools
这是我的代码与一个简单的指令叫做test:
var app = angular.module("app",[]);
app.directive('test',function(){
return {
link(scope,el,attrs){
var outerVar = 'im in the outer scope';
var myFunc = function(){
var someText = 'just to be able to put a breakpoint here';
}
myFunc();
}
}
});
我添加了断点在var someText。然后,我试图从开发工具控制台输入outerVar来获取值,我得到"ReferenceError: outerVar未定义"。
但是当我将myFunc修改为
时var myfuction(){
console.log(outerVar);
};
我得到的值,甚至更多,我可以从outVar输出的值在开发工具控制台,但只有outVar,而不是外部变量,如范围,el,和attrs…再次,如果我对其他变量执行a console.log,我得到相同的结果——它工作,但不是在开发工具控制台。
Chrome Developer Tools显示并提供访问本地和全局变量在"Sources"answers"Console"选项卡,当它遇到你设置的断点。当"Closure"变量在设置了断点的函数范围内使用时,它还将提供对这些变量的视图和访问。这就是为什么在函数内部调用console.log()时会看到外部变量的原因。
但是,Developer Tools并没有为您提供访问外部作用域中没有在设置断点的局部作用域中使用的任何变量的权限。为了在"控制台"中访问这些变量并在"源"中查看,您可以在"源"的"调用堆栈"部分中选择高于断点的作用域。
下面是一个注释的例子,讨论了函数内部的断点在哪里可以看到变量。它不包含任何AngularJS代码,因为你所描述的问题根本不是Angular特有的。
// seen as "Global" from breakpoint inside of myFunc or anywhere else
var global = "global";
(function() {
// seen as "Closure" from breakpoint inside of myFunc only if used there
var outer = "outer";
function myFunc() {
// seen as "Local" from breakpoint inside of myFunc
var inner = 'inner';
// uncomment to see "outer" in Dev Tools
//outer;
debugger;
}
myFunc();
})( );
Plunkr
相关文章:
- 一次显示一个隐藏指令-AngularJS
- 一次显示一个指令AngularJS
- 在同一页面上多次使用的自定义指令 (AngularJS) 中的验证
- 无法绑定到没有指令 + angularjs 标识符的控制器
- 值未传递给指令-AngularJS
- 测试依赖于另一个指令Angularjs的指令
- 根据指令angularjs 1.2分配控制器
- 有模板问题的指令.AngularJS
- 编译指令在指令 AngularJS 中
- 我可以将 templateUrl 传递给指令 - AngularJS
- 从子指令的父指令 [angularJS] 触发子指令中的函数
- 将服务注入指令 AngularJS 和数据绑定
- 在指令 AngularJS 中解析
- 从指令 AngularJS 给出高图表正确的参数
- 获取 JSON 数据并传递给指令 Angularjs
- 点击事件后的渲染模板指令 - AngularJs
- 如何从分页指令angularjs隐藏直接页面链接
- AngularJS-关闭tile并从ngRepeat指令AngularJS中的模型加载新视图
- 触发指令AngularJs的控制器作用域
- 将定义的对象传递给另一个自定义指令angularjs