有时刻人们并不存眷这些细节,但这方面的常识肯定有效,尤其是当你正在编写竽暌闺测试或errors相干的库。例如这个礼拜我们的chai中出现了一个令人赞叹的Pull Request,它大年夜大年夜改进了我们处理客栈跟踪的方法,并在用户断言掉败时供给了更多的信息。
操作客栈记录可以让你清理无用数据,并集中精力处理重要事项。此外,当你真正弄清跋扈Error及其属性,你将会更有信念肠应用它。
本文开首部分或许太过于简单,但当你开端处理客栈记录时,它将变得稍微有些复杂,所以请确保你在开端这个那部分章节之前已经充分懂得前面的内容。
在谈论errors之前我们必须明白客栈调用若何工作。它异常简单,但对于我们将要深刻的内容而言倒是至关重要的。如不雅你已经知道这部分内容,请随时跳过本节。
每当函数被调用,它都邑被推到客栈的顶部。函数履行完毕,便会大年夜客栈顶部移除。
客栈调用若何工作
这种数据构造的有趣之处在于最后一小我栈的将会第一个大年夜客栈中移除,这也就是我们所熟悉的LIFO(落后,先出)特点。
这也就是说我们在函数x中调用函数y,那么对应的客栈中的次序为x y。
假设你有下面如许的代码:
- function c() {
- console.log('c');
- }
- function b() {
- console.log('b');
- c();
- }
- function a() {
- console.log('a');
- b();
- }
- a();
c履行完毕后便会大年夜栈顶移除,这时控制流从新回到了b中,b履行完毕同样也会大年夜栈顶移除,最后控制流又回到了a中,最后a履行完毕,a也大年夜客栈中移除。
我们可以应用console.trace()来更好的演示这种行动,它会在控制台打印出当前客栈中的记录。此外,平日而言你应当大年夜上到下攫取客栈记录。想想下面的每一行代码都是在哪调用的。
- function c() {
- console.log('c');
- console.trace();
- }
- function b() {
- console.log('b');
- c();
- }
- function a() {
- console.log('a');
- b();
- }
- a();
- Trace
- at c (repl:3:9)
- at b (repl:3:1)
- at a (repl:3:1)
- at repl:1:1 // <-- For now feel free to ignore anything below this point, these are Node's internals
- at realRunInThisContextScript (vm.js:22:35)
- at sigintHandlersWrap (vm.js:98:12)
- at ContextifyScript.Script.runInThisContext (vm.js:24:12)
推荐阅读
近些年来,深度卷积神经收集(DCNN)在图像分类和辨认上取得了很明显的进步。回想大年夜 2014 到 2016 这两年多的时光,先后出现出了 R-CNN,Fast R-CNN, Faster R-CNN, ION, HyperNet, SD>>>详细阅读
地址:http://www.17bianji.com/lsqh/34953.html
1/2 1