Creeper
                                            Creeper
                                        
                                    @zengyuangai 另外慢启动影响较大的的确是小文件传输,已更正,感谢。
### 7. 原型链导致的属性更改无效 **问题**: 看下面的代码,为什么`obj.x = 100`的赋值无效? ``` js var proto = Object.create({}, { x: { value: 1, writable: false } }); var obj = Object.create(proto); obj.x = 100; //...
### 10. Function.prototype.call/apply 的 this 问题 **问题**: 下列情况中`this`为什么是这样的? ``` js function nsm() {console.log(this);} nsm(); // Window{top: xxxx} nsm.call(null/undefined); // Window{top: xxxx} nsm.call(1); // Number {[[PrimitiveValue]]: 1} function sm() {'use strict';...
### 13. `jQuery.trigger`的`extraParameters`为`undefined`的问题 **问题**: 下面`slider`为什么是`undefined`? ``` js // self 为 某jQuery对象 $slider.trigger('slideend', self); // 监听 $dom.on('slideend', function(ev, slider) { // Uncaught TypeError: Cannot read property 'value' of undefined console.log(slider.value); //...
### 14. `delete`操作符 **问题**: 试着解释下面代码的结果? ``` js (function(x){ delete x; return x; })(1); // 返回 1 ``` 在QQ群看到这个问题,想想还是有点坑在里面的。翻了翻[MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/delete),加深/重新记忆下对`delete`的理解。 `delete`是删除对象的属性。严格模式下,删除`non-configurable`的属性报错,非严格则返回`false`,其它任何情况都返回`true`。 回到本题,`delete x`其实是尝试删除局部变量`x`,~~局部变量是`non-configurable`的~~,所以无法删除,在严格模式下,题中代码将报错。 更正:对局部变量和函数名`delete`是无效的,`delete`只能删除属性。`delete obj.propName` 才是合法的形式。下面以代码详细解释: ``` js // ========例1======== (function(x) {...
### 15. `jQuery.fn.offset`不支持获取和设置`display:none`元素的坐标 不支持获取很好理解,`display:none`元素不在文档流中,获取位置自然是`undefined`。而`$(hiddenElement).offset()`会返回`{top: 0, left: 0}`以提高程序健壮性。 不过问题核心是为什么无法正确设置`display:none`元素的坐标,具体点,即为什么 **`$(hiddenElement).offset(options)`设置的真实值是指定值的两倍** ? ``` js var offset = {top: 10, left: 10}; $dom.offset(offset); // $dom 是 display none 的 // 实际情况,$dom被设置成 left: 20px;...
### 16. 找出字符串中出现最多的字母 这个问题看起来用到的地方挺多,至少我遇到过不止一次,索性在这里讲一讲。先具体描述下问题: 假设字符串`'ababccdeajxac'`,请找出出现次数最多的字符? 最先想到的解法是用map纪录每个字符的次数,然后找出最多的即可: ``` js function getMaxNumberOfChar(str) { return (str + '').split('').reduce(function(pre, cur, index, arr) { cur in pre ? pre[cur]++ : (pre[cur] = 1); pre[cur] >...
### 17. `storage event` 当你用`localStorage`或`sessionStorage`的API去更改`Storage`时,会触发`storage`事件: ``` js window.addEventListener('storage', function(e) { console.log('storage', e); }); ``` 这里没有什么特别的,**但基本所有问题的根源,或者说要特别注意的是:本页面更改`Storage`只能在同域名的其它页面去捕获`storage`事件。** > The StorageEvent is fired whenever a change is made to the Storage object. This...
### 18. 一个函数柯里化问题及更多 C君出了这样一个题,要求实现`sum`函数如下: ``` sum(1) // 1 sum(1)(2) // 3 sum(1)(2)(3) // 6 ``` 第一眼,这不是函数柯里化吗,小case,然后我挥笔写下: ``` js function sum(item) { var cur = item; var inner = function(next) {...
### 19. 运算符优先级问题 普通的运算符优先级对大家应该不成问题,另外也推荐用括号来明确运算符优先级和代码意图,写出**更可读的代码**。 但之所以有这个问题,是涉及到 **`typeof`** 运算符,比较新颖。 问题: ``` js var str = 'why I am ' + typeof + ''; // so what is str? ``` `str`是`why I am...