首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么函数打印i: 6而不是i: 5

函数打印i: 6而不是i: 5的原因可能是由于变量i在函数内部被重新赋值了。在函数执行过程中,可能存在以下几种情况导致i的值变为6:

  1. 函数内部存在一个局部变量i,并且在函数内部对i进行了赋值操作。这样,函数内部的i会覆盖外部的i,导致打印结果为6。
  2. 函数内部调用了其他函数或方法,这些函数或方法可能会修改i的值。如果在函数调用过程中对i进行了修改,那么最终打印的结果就会是修改后的值。
  3. 函数内部使用了全局变量i,并且在函数外部对i进行了修改。如果在函数执行期间,函数外部对i进行了修改,那么函数内部打印的结果就会是修改后的值。

需要注意的是,函数内部对i进行的任何修改都不会影响函数外部的i的值,除非使用全局变量或者通过参数传递的方式进行修改。

关于函数打印i: 6而不是i: 5的具体原因,需要查看函数的实现代码才能给出准确的答案。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

为什么选择XKUC5P不是XC7K325T?

但XC7K325T毕竟是K7系列,资源量还是有限,如果想找一款比XC7K325T资源大,同时价格又不会贵太多的芯片,那XKUC5P绝对是一个非常不错的选择。...首先来看看下XKUC5P和XC7K325T的资源对比: XKUC5P: XC7K325T: 可以看到,Logic Cell的数量,XKUC5P是XC7K325T的1.5倍,DSP和Memory都是2倍多...,IO数量也是1.6倍,而且XKUC5P采用的是16nm工艺,XC7K325T由于时间比较久了,采用的还是28nm工艺,很多工程师对工艺的影响没什么太大概念,我们下来总结一下: 更高的性能:16nm制程的晶体管尺寸更小...虽然XKUC5P比XC7K325T在各种方面都有很大优势,但价格却不会贵太多,有大量现货,有兴趣的朋友可以加微信,提供免费FPGA方面的技术支持:

26710

i.MX6ULL嵌入式Linux开发5-根文件系统完善

1 完善根文件系统 上篇说道,Linux系统运行起来后,可以正常的执行"ls"等基础命令,但仔细观察系统运行后的打印信息,有一条提示: can't run '/etc/init.d/rcS': No such...它其实是一个shell脚本, 在Linux内核启动以后,需要启动一些服务, rcS就是规定启动哪些文件的脚本文件。...第 5 行:按下ctrl+alt+del组合键的将运行 /sbin/reboot(注:windows系统的串口软件连接开发板,这个命令无效,因为该组合键会被windows系统拦截执行windows系统的...第 6 行:关机的时候执行 /bin/umount,也就是卸载各个文件系统。 第 7 行:关机的时候执行 /sbin/swapoff,也就是关闭交换分区。...程序每隔2秒打印一次,运行正常,说明我根文件系统中的动态库没有问题。按下“ctrl+c”组合键即可中止该程序。

1.3K30

面试官:为什么data属性是一个函数不是一个对象?

警告说明:返回的data应该是一个函数在每一个组件实例中 二、组件data定义函数与对象的区别 上面讲到组件data必须是一个函数,不知道大家有没有思考过这是为什么呢?...getData(data, vm) : data || {} ... } data既能是object也能是function,那为什么还会出现上文警告呢?...... } 定义data会进行数据校验 源码位置:/vue-dev/src/core/instance/init.js 这时候vm实例为undefined,进入if判断,若data类型不是...采用函数的形式,initData时会将其作为工厂函数都会返回全新data对象 面试官VUE系列总进度:10/33 面试官:说说你对vue的理解? 面试官:说说你对SPA(单页应用)的理解?...面试官:为什么Vue中的v-if和v-for不建议一起用? 面试官:SPA(单页应用)首屏加载速度慢怎么解决? 面试官:Vue中组件和插件有什么区别?

3.1K10

是否还在疑惑Vue.js中组件的data为什么函数类型不是对象类型

分析Vue.js组件中的data为何是函数类型而非对象类型 引言 正文 一、Vue.js中data的使用 二、data为对象类型 三、data为函数 结束语 引言 要理解本篇文章,必须具备JavaScript...看了上面的例子,我们再来看看data为函数的例子,一般只有在可复用的Vue实例中,data才为函数 data: function() { return { name: '李四', age:...'55' } } 组件中data使用函数的情况 其实当我们把组件注册到别的页面上时,也会创建一个Vue实例,就像这个样子 function Vue() { //此处data的值为一个函数,调用时会return...Vue,创建一个实例对象 //又创建了一个Vue实例,会调用上面的定义的函数 let vm2 = new Vue() //此时vm2是这样的 vm2 = { //这里的data,是先获取了函数Vue...这是因为这两个实例对象在创建时,是先获得了一个函数,将该函数的返回值作为了自己属性data的值,并且这两个实例对象中data的值在栈中对应的堆中的地址也不一样,所以他们不会互相影响。

3.4K30

框架篇-Vue面试题1-为什么 vue 组件中的 data 是函数不是对象

在vue组件中data的属性值是函数,如下所示 export default { data() { // data是一个函数,data: function() {}的简写 return...default { data: { // data是一个对象 name: 'itclanCoder', }, }; 当一个组件被定义,data必须声明为返回一个初始数据对象的函数...也就是说,在很多页面中,定义的组件可以复用在多个页面 如果data是一个纯碎的对象,则所有的实例将共享引用同一份data数据对象,无论在哪个组件实例中修改data,都会影响到所有的组件实例 如果data是函数...,每次创建一个新实例后,调用data函数,从而返回初始数据的一个全新副本数据对象 这样每复用一次组件,会返回一份新的data数据,类似于给每个组件实例创建一个私有的数据空间,让各个组件的实例各自独立,互不影响...,保持低耦合 可以看下面一段代码 // 声明构造器函数 function Person() {} Person.prototype.data = { // 原型下挂载一对象,并有name属性

1.9K20

js闭包就那么回事

image.png 据说至少一半的初学者会回答1,2,3,4,6 等等,那个8903是个什么鬼,其实那个8903是setTimeout函数的返回值,本来应该打印5个出来的,如下图所示: image.png...但是为什么打印了1个出来呢,不是应该打印5个吗?...{ fun() }`)) ,我们知道,eval返回值的规则,如果你不知道,可以在这里了解eval() - JavaScript | MDN image.png 因为,回到我们的最初代码...for(var i=1;i<=5;i++){ setTimeout(function timer(){ console.log(i) },i*1000) } 这里打印了一个...但是,我想说的是,这个说了这么多,只是一个插曲而已,本文的重点不是这个,就上述这段代码,我们的本意是想让它打印1.2.3.4.5的,结果你给我56。那么,改为下面这个方式呢?

651121

你不知道的Javascript:有趣的setTimeout

我们继续上图: [111.gif] 执行结果显示,浏览器打印出了十个10(因为图片处理的原因,按下回车到打印之前其实间隔了5秒左右),貌似乙胜出了。...但如果你足够细心,你会发现几个问题: 为什么会循环打印十个10不是0到9?...为什么不是每次迭代都执行一次setTimeout 大家都知道,JavaScript在ES6出现以前,是没有块状作用域的,这就意味着, 在for循环中用var定义的变量j,其实是属于全局的,即在全局范围内都可以被访问到...那么现在关键的问题在于,为什么整个for循环会先于setTimeout执行,不是我们正常理解的,一次迭代执行一次。 这就涉及到了JavaScript的核心特性:单线程。...此时,i已经经过循环结束变成了10,所以,此时主线程执行的,是十个一摸一样的打印i的回调函数,即打印十个10。

723100

你不知道的Javascript:有趣的setTimeout

甲:顺序打印0到9? 乙:这题我见过,打印十个10! 哪个答案正确?我们继续上图: ? 执行结果显示,浏览器打印出了十个10(因为图片处理的原因,按下回车到打印之前其实间隔了5秒左右),貌似乙胜出了。...但如果你足够细心,你会发现几个问题: 为什么会循环打印十个10不是0到9?...为什么不是每次迭代都执行一次setTimeout 大家都知道,JavaScript在ES6出现以前,是没有块状作用域的,这就意味着, 在for循环中用var定义的变量j,其实是属于全局的,即在全局范围内都可以被访问到...那么现在关键的问题在于,为什么整个for循环会先于setTimeout执行,不是我们正常理解的,一次迭代执行一次。 这就涉及到了JavaScript的核心特性:单线程。...此时,i已经经过循环结束变成了10,所以,此时主线程执行的,是十个一模一样的打印j的回调函数,即打印十个10。至此就完美回答了第一和第二个问题。

82240

浅析golang中的defer

func main() { a := 1 defer fmt.Println("defer", a) a++ } //结果 defer 1 根据前面介绍的defer会在return之后再执行,为什么还是打印...", b) } func main() { a := 1 defer def(a) a++ } //结果 defer 1 可见输出的是1不是2,因为使用defer的那一刻就已经确定a的值了,...int) { fmt.Println("defer", *b) } func main() { a := 1 defer def(&a) a++ } //结果 defer 2 此时的结果为2,不是...+1的值 这里可以简单解释一下闭包的作用 可以读取函数内部的变量 闭包里的变量本质上是对上层变量的引用,因此最后的值就是引用的值 让这些变量的值始终保持在内存中,不会被GC 6.defer执行+非命名返回值...,发现没用指针传递的函数结果非命名返回值的是1,命名返回值的是2,而用了指针传递的函数两个结果都是2 为什么会这样呢,因为return时会重新把要返回的结果赋值给另一个变量,那么defer里面的+1操作是对赋值前的变量进行

47720

Python 面试中 8 个必考问题

这是因为带有默认参数的表达式在函数被定义的时候被计算,不是在调用的时候被计算。因此list1和list3是在同一个默认列表上进行操作(计算)的。list2是在一个分离的列表上进行操作(计算)的。...上面代码输出的结果是[6, 6, 6, 6] (不是我们想的[0, 2, 4, 6])。 上述问题产生的原因是Python闭包的延迟绑定。这意味着内部函数被调用时,参数的值在闭包内进行查找。...3 2 3 不是 3 2 1.为什么在改变parent.x的同时也改变了child2.x的值?...)这就是为什么第三打印语句输出结果是3 2 3 4、下面这段代码在Python2下输出结果将是什么?...因此,5/2 结果是2,5./2结果是2.5 注意,在Python2中,你可以通过增加以下引用来覆写这个行为。

42330

for...of循环的使用

为什么报错了,报错的错误提示写的很清楚,因为object对象不是可迭代的,也就是说它不是可迭代对象。 这里遇到一个新的名词,什么是可迭代对象呢?...} } for (let value of loop10) { console.log(value); // 分别打印 0 1 2 3 4 5 6 7 8 9 } 迭代器协议的对象也可以自己调用着玩玩...6, 7, 8, 9] 可迭代对象与generator函数 当我们看到一个个可迭代对象的next方法,再看看一个个的{value: 0, done: false}这种符合迭代器协议的对象,这时不想跟generator...) 不是loop10Gen for (const value of loop10Gen()) { console.log(value); // 分别打印 0 1 2 3 4 5 6 7 8 9 }...由于for…in遍历的是对象的可枚举属性,所以对于数组来说打印的是键,不是值: let array = ['a', 'b', 'c']; for (const value in array) {

6810

从一道面试题谈谈 setTimeout 和 setInterval

结果是,每隔一秒打印一个 5 ,一共打印 5 次。这是为什么呢,为什么不是打印 0, 1, 2, 3, 4 呢?...这就是为什么 setTimeout 中函数延迟执行的时间往往大于设置的时间。 因此,对于上述的代码块,每一个 setTimeout 函数都被添加到了任务队列中。然后,这还涉及到了函数作用于的问题。...因为当任务队列中的函数执行的时候,其作用域其实是全局作用域。setTimeout 中的打印函数执行的时候就会在全局作用域中寻找变量 i此时全局作用域的变量 i 的值已经变成 5 了。...这也就是为什么打印的数字都是 5。那么应该如何达到我们一开始预期的效果呢?这里我们就需要考虑到函数执行上下文的问题,可以通过立即执行函数(IIFE)来改变函数作用域。...通过立即执行函数改变函数运行的作用域,并且将要打印的变量传入到函数参数中,如此就能打印出正确的数字了。那么除了 setTimeout,我们是不是还有其它的方法呢?

48420

Python面试中8个必考问题

这是因为带有默认参数的表达式在函数被定义的时候被计算,不是在调用的时候被计算。因此list1和list3是在同一个默认列表上进行操作(计算)的。list2是在一个分离的列表上进行操作(计算)的。...上面代码输出的结果是[6, 6, 6, 6] (不是我们想的[0, 2, 4, 6])。 上述问题产生的原因是Python闭包的延迟绑定。这意味着内部函数被调用时,参数的值在闭包内进行查找。...3 2 3 不是 3 2 1.为什么在改变parent.x的同时也改变了child2.x的值?...)这就是为什么第三打印语句输出结果是3 2 3 4、下面这段代码在Python2下输出结果将是什么?...因此,5/2 结果是2,5./2结果是2.5 注意,在Python2中,你可以通过增加以下引用来覆写这个行为。

46820
领券