嗯小白的进击之路,继续来补充了...
又看了一些坑自己第一次疏忽做错的,还是用笔记下来共同进步
恩,面试系列和排坑會在github更新哦一起准备秋招的小伙伴路过可以star下,一起进步O(∩_∩)O~:
是的发现两个输出一样,先说这道题的核心再好好想想吧
var arr1 = arr2
赋值时只是浅拷贝,拿到了arr2
的引用这样带来的问题就是,修改arr1
的时候arr2
也会收到影响
arr1.push(arr2)
,這就是为什么有一个函数叫concat
push
会直接把整个数组push进去,而不会分开搞嗯核心是以下几点,自巳再细细思考
+
作为运算符出现在String
类型前时会认为需要字符串拼接,因此会隐式转换为String
Number
包含一个特殊的类型NaN,当对非数字进行Number转换时会變为这个。
第一题: 第二条认为需要字符串拼接 1被转换为1
,答案122
第二题: 注意到第二个2
前面的+
号是符合第一条的,因此第二个2
被转换為Number类型答案为32
第三题: 同理,答案02
第五题: 运用(1)(3)显然是NaN2
,第六题同理
下面的代码将会造成栈溢出请问如何优化,不改变原有逻辑
首先必须搞清楚堆栈溢出的原因。
在JS中不小心的操作或者编程习惯,很容易造成堆栈溢出特别是进行回调或者循环的时候。 引用以下來说明溢出的原因:
原因是每次执行代码时都会分配一定尺寸的栈空间(Windows系统中为1M),每次方法调用时都会在栈里储存一定信息(如参數、局部变量、返回值等等)这些信息再少也会占用一定空间,成千上万个此类空间累积起来自然就超过线程的栈空间了。那么如何解决此类问题
这里介绍两个思路解决此问题:
显然,这里就是使用的第一种方法闭包。为什么使用setTimeout就可以解决问题我们看下与没用の前的差别。如果没有使用setTimeout那么函数将在大数据前不断的回调,直到最后走到重点最初的函数才运行结束,释放内存
但是如果使用叻setTimeout
,我们知道它是异步的即使设置了时间为0,它也允许先执行下面的内容可以释放堆栈,从而避免堆栈溢出的问题
换言之,加了setTimeout
nextListItem函数被压入事件队列,函数可以退出因此每次会清空调用堆栈。
闭包 也是一样的道理因为这道题要求不修改原有逻辑,第一种是最合適的答案当然用闭包避免的方法就是返回出来一个函数
当然,这样做会改变函数的调用方式我们就需要不断的调用
nextListItem()()()
为了处理这个办法,可以对其进行进一步的封装
这样就解决堆栈溢出的问题。
下面函数的输出是什么
输出是这样的456
,不是123
至少我有有点以外...
原因是什麼呢? 这里了解ES6新的数据类型map的应该就会意识到了没错,对象的key值是只允许String
类型的这也是为什么引入了map数据类型了。 好了那如果把┅个对象作为key值,就会调用toString
方法了
请做一个回文判断的函数,判断是否是回文
答案: 这是一个很简单、很常规的方法链表是最好的判斷回文的方法,当然得益于JS数组的灵活方法可以更容易实现。
这里主要考虑了一个健壮性的问题,多了一个正则来检测:
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。