搞懂JS变量提升

本文讲解Javascript变量提升引起的问题以及如何规避。

问题

今天看到一道有意思的面试题,考察的还真是JS的基本功,题目如下:

1
2
3
4
5
6
7
8
9
10
var name = "world";

(function(){
if(typeof name === "undefined") {
var name = "Jack";
console.log("Hello " + name);
} else {
console.log("Hello " + name);
}
}());

实现一个JS深拷贝函数

JS深拷贝概念并不新鲜,但是真正要真正理解原理还是有点难度的。这也是JS语言精粹之一吧。

例子

1
2
3
4
5
6
7
8
9
10
let a = {
name: 'demo',
age: 18
};

let b = a;
b.name = 'demo1';

console.log(a); // 输出 {name: "demo1", age: 18}
console.log(b); // 输出 {name: "demo1", age: 18}

因为JS对于对象的赋值使用的是浅拷贝,其中一个实例变量的赋值会影响到所有指向该对象变量

js在线调试工具

在进行微信开发的时候,由于JS SDK提供的api需要在真机调试,而手机端的console方法虽然存在,但是调用结果却看不到。所以笔者使用socket.io重写了一个在线版本的调试工具。

工具地址

使用方法

JS提取字符串中文英文数字

最近在做导出excel的时候,发现导出成功,文件大小也正常,但是Office 2013打不开,检查数据库发现,导出数据中有非中文字符导致Excel异常。

我们知道JS是支持unicode字符集的,符合导出规则的字符应该是”中文”、”英文”、”数字”。

正则表达式

1
/([\u4e00-\u9fa5\w]*)/ig

JS函数不同执行环境下的this指向

先来看一段代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var length = 10;
function fn() {
console.log(this.length);
}

var obj = {
length: 5,
method: function(fn) {
fn();
arguments[0]();
}
};

obj.method(fn,1);

猜猜输出结果?

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×