xiaochao Blog

Stay Hungry. Stay Foolish.

每天一个前端知识(48):避免使用eval创建局部变量

frontend

// 强大的eval函数 function f() { eval('var a = 2'); return a; } console.log(f()); // 2 // 在函数内部使用eval很危险,这赋予了外部的调用者改变函数内部的作用域的能力 function g(str) { var a = 1; eval(str); return a; } c...

每天一个前端知识(47):当心局部块函数声明笨拙的作用域

frontend

function g() { return 'outer'; } function f(flag) { var result = []; function g() { return 'inner'; } if(flag) { result.push(g()); } result.push(g()); ...

每天一个前端知识(46):当心命名函数表达式笨拙的作用域

frontend

// 命名的函数表达式 var f = function func() { // func的作用域只是在本函数内部,在外部不可访问 console.log(f); console.log(func); }; console.log(f); // console.log(func); // func is not defined // 所以尽量使用匿名的函数表达式 fu...

每天一个前端知识(45):使用立即调用的函数表达式创建局部作用域

frontend

// 新的函数才会产生新的作用域,JavaScript的循环没有新的作用域产生。 // 测试使用的数组 var testArr = [1, 2, 3]; // @1 不使用闭包的情况下我们使用的是的引用 function generateFunc(arr) { var result = []; var n = arr.length; for(var i = 0; i ...

每天一个前端知识(44):理解变量声明提升

frontend

// 因为变量提升 所以不会有报错 console.log(test); // undefined // 相当于把 var test提升到顶部 赋值部分 test = 1 还是在原来的位置; // 如果把下面这句话注释掉的话,上面的语句就会报错。 var test = 1; 谨记 在代码块中的变量声明会被隐式地提升到封闭函数的顶部 重声明一个变量会被视为单个变量 考虑手动提升局部变...

每天一个前端知识(43):熟练掌握闭包

frontend

// 我们利用闭包构建一个简单的容器 function Container() { var store = []; return { getItem: function(index) { return store[index]; }, addItem: function(obj) { ...

每天一个前端知识(42):避免使用with

frontend

// 使用with往往是比较慢的 console.time('use with'); with(Math) { console.log(min(1, 2)); console.log(max(3, 2)); console.log(ceil(2.5)); } console.timeEnd('use with')...

每天一个前端知识(41):始终声明局部变量

frontend

var arr = [0, 1, 2]; // 隐形的创建了一个全局变量temp function swap(array, indexI, indexJ) { temp = array[indexI]; array[indexI] = array[indexJ]; array[indexJ] = temp; } swap(arr, 0, 1); console.log...

每天一个前端知识(40):尽量少用全局变量

frontend

// 显式的声明全局变量 var g = 'global'; // 隐藏的全局变量 gl = 'it is not good'; function func() { // 隐藏的全局变量 inner = 'inner'; // 显式的生命局部变量 var gg = 'inner gg'; } console.log(window.g === g, g === ...

每天一个前端知识(39):把字符串当做16位编码单元的序列

frontend

console.log("𝄞 clef".length); // 7 console.log("G clef".length); // 6 console.log("𝄞 clef".charCodeAt(0)); // 55348 (0xd834) console.log("𝄞 clef".charCodeAt(1)); // 56606 (0xdd1e) console.log("𝄞 cl...