var f = function g() {
return 23;
};
typeof g(); // error g is not defined复制代码
在javaScript里,声明函数只有2种方法java
第一种:函数声明windows
function foo(){...}
复制代码
第二种:函数表达式bash
var foo = function(){...}
复制代码
其余如var f = function bar() {....}等声明都按第二种方法处理,函数外部没法经过bar访问到函数,由于是一个表达式闭包
如下代码存在几个变量没有被回收? 函数
var i = 1;
var i = 2;
var add = function() {
var i = 0;
return function(){
i++;
console.log(i);
}}();
add();复制代码
变量回收规则有三点ui
1.全局变量不会被回收this
2.局部变量会被回收,函数执行完后内部的东西都会被销毁spa
3.若是变量被另一个做用域引用就不会被回收prototype
由此能够得知有三个变量没有被回收,分别是全局变量i、add 还有闭包中的icode
var x = new Boolean(false);
if (x) {
alert('hi');
}
var y = Boolean(0);
if (y) {
alert('hello');
}复制代码
输出: hi复制代码
new Boolean 与 Boolean的区别在于:用new调用构造函数会新建一个布尔对象,因此此处的x为对象,任何对象转布尔值都为true!
而Boolean,此处没有new, 进行的是显式转换,0转布尔值为false
顺序:事件捕获 -> 事件处理 -> 事件冒泡
描述:先事件捕获从windows > document 往下级直到特定事件节点,而后进行事件处理,再事件冒泡,从节点往上级冒泡
var A = {n:4399}
var B = function () {
this.n = 9999
}
var C = function () {
this.n = 9999
}
B.prototype = A
C.prototype = A
var b = new B()
var c = new C()
A.n++;
console.log(b.n) // 9999
console.log(c.n) // 4400复制代码
此题考查的是:在查找 b.n 是首先查找 b 对象自身有没有 n 属性,若是没有会去原型(prototype)上查找