关于函数声明:如果 function 是声明中的第一个词, 那么就是一个函数声明, 否则就是一个函数表达式。例如匿名函数这种形式,函数会被当作函数表达式而不是一个标准的函数声明来处理。(function(){// 立即执行函数表达式
})()这种表达式有另外一种用途是倒置代码的运行顺序, 将需要运行的函数放在第二位, 在 IIFE执行之后当作参数传递进去。var a = 2;
(function IIFE( def ) {def( window );
})(function def( global ) {var a...
一、关于this篇:1.this实际上是在函数被调用时发生的绑定,它指向什么完全取决于函数在哪里被调用2.this优先级:new>显示绑定>隐式绑定>默认绑定。3.如果把null或undefined作为this的绑定对象传入call、apply或者bind,这些值在调用时会被忽略,实际应用的是默认绑定规则eg:function foo(){ console.log(this.a);}var a=2;foo,bind(null); //24.将arguments(类数组)变为数组(1)Array.prototype.slice.apply(arguments) ...
运算符对于大家来说并不陌生,只要平时写代码就会频繁用的到。可能平时大家只关注它们的使用层还停留在只知其用法的表面,但是运算符有一些鲜为人知技能,明白以后会让你掌握运算符的原理和运算符的奇技淫巧以及解决一些面试题
先来看一些面试题,请小伙伴本着不去试的原则写出下而四道题的运行结果//1
console.log(‘kaivon‘ && (2+1));
console.log(![] || ‘你好,siri‘);//2
{let a=10,b=20;const fn=()=>(a++,b++,10);conso...
bug合集又开始了 坑王 操作数选择器。。。 原文:https://www.cnblogs.com/cx2016/p/13202893.html
<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>你不知道的javascript(上卷)</title>
</head><body>
</body></html>
原文:http://www.cnblogs.com/SunlikeLWL/p/7376458.html
你不知道的Javascript:有趣的setTimeout有时候,小小的细节往往隐藏着大大的智慧今天在回顾JavaScript进阶用法的时候,发现一个有趣的问题,话不多说,先上代码:for(var j=0;j<10;j++){ setTimeout(function(){console.log(j)},5000)}看到这三行代码,也许你会不耐烦道:又要讲闭包?要吐了好么?别急,让我们先来思考一下,这段代码在浏览器中的执行结果是什么?甲:顺序打印0到9?乙:这题我见过,打印十个10!哪个答案正确?...
最近在读一本进阶的JavaScript的书《你不知道的JavaScript(上卷)》,里面分析了很多基础性的概念。可以更全面深入的理解JavaScript深层面的知识点。 一、函数作用域1)函数作用域就是作用域在一个“Function”里,属于这个函数的全部变量都可以在整个函数的范围内使用及复用。function foo(a) {var b = 2;function bar() {// ... }var c = 3;
}bar(); // 失败
console.log( a, b, c ); // 三个全都失败上面的“foo”函数内的几个...
一、对象
JavaScript简单类型有数字、字符串、布尔值、null、undefined,其他所有的值都是对象(数组、函数、正则表达式都是对象)。
数字、字符串、布尔值虽然拥有方法(包装对象),但并不是对象。
包装对象:
每当读取一个基本类型值的时候,后台会创建一个对象的基本包装类型的对象,从而能够调用一些方法来操作这些数据。
var s1 = abcdefg ;
var s2 = s1.substring(2) ;后台自动完成下列处理:
创建String类型的一个实例在实...
这本书之前囫囵地看了一遍,确实点明了很多以前不清不楚的点,但是仅仅看一遍是没什么用的,最近面试遇到不少原理相关的题感觉答得不理想,回头看下其实以前都理解过,但是没有记下来,正好结合实际的问题来再学习一下书上的内容。
第一个问题:JavaScript是如何查找变量的?
第1部分 作用域和闭包
第1章 作用域是什么?
编译原理
这本讲解JavaScript的书首先讲的却是编译原理,一开始看起来让人费解,但实际上从后面内容我们可以发...
文章目录
《你不知道的JavaScript (上卷) 》第三章函数作用域和块作用域隐藏变量和函数对于全局命名空间:函数的作用域:块作用域:let关键字《你不知道的JavaScript (上卷) 》
第三章函数作用域和块作用域
隐藏变量和函数
ES5中没有块作用域,有时候需要“隐藏”变量和函数,有很多原因促成了这种基于作用域的隐藏方法。 它们大都是从最小特权原则中引申出来的, 也叫最小授权或最小暴露原则。 这个原则是指在软件设计中, 应该最...
undefined.toString(); // TypeError: Cannot read property toString of undefinednull.toString(); // TypeError: Cannot read property toString of nulltrue.toString(); // "true"111..toString(); // "111"[1,2,3].toString(); // "1,2,3"undefined/null 是一个原始值 不是对象 就没有原型 就调用不到Object.prototype(原型链最终原型)的 toString 方法。c,d,e会强制转化,调用其对应的Boolean.toString(),Number.toString()...
Array 构造函数只带一个数字参数的时候,该参数会被作为数组的预设长度,而非只充当数组中的一个元素。这实非明智之举;一是容易忘记,二是容易出错。更为关键的是,数组并没有预设长度这个概念。这样创建出来的只是一个空数组,只不过它的 length 属性被设置成了指定的值
我们将包含至少一个 ”空单元“ 的数组称为 ”稀疏数组“
如果一个数组没有任何单元,但它的 length 属性中却显示有单元数量,这样奇特的数据结构会导致一...
所有 typeof 返回值为 'object' 的对象(如数组)都包含一个内部属性
数组,正则表达式,对象的内部属性[[Class]]和创建该对象的内建原生构造函数相对应
Null(),Undefined()这样的原生构造函数不存在,但是内部属性值仍然是 'Null' 'Undefined'
基本类型值被各自的封装对象自动包装,所以它们的内部属性值是 'String' 'Boolean' 'Number'
注 1:原理是这样的,不同的对象在底层都表示为二进制,在 JavaScript 中二进制前三位都为 0 的话会被判 断为 object 类型,null 的二进制表示是全 0,自然前三位也是 0,所以执行 typeof 时会返回“object”。
——译者注对象 | 103
内置对象
JavaScript 中还有一些对象子类型,通常被称为内置对象。有些内置对象的名字看起来和 简单基础类型一样,不过实际上它们的关系更复杂,我们稍后会详细介绍。
? String
? Number
? Boolean...
第一部分 还有最后的闭包没有讲...:
1.非常浅显的阅读《你不知道的JavaScript》第一部分作用域与闭包
https://www.bilibili.com/video/BV1jE411j7PU
?
从22分钟开始讲闭包
?
?
?
?
<style></style>