冷知识!
1、flex-grow:1; flex-grow:2; flex-grow:1;
flex-grow:2;是否是flex-grow:1;的两倍?
答案是否定的:flex-grow ,如果三个块状有基础宽度,那么flex-grow将是(窗口总宽度-三个块基本宽度)/ 份数,即 剩余宽度/份数
2、constructor 指向构造他的函数 ,什么是构造函数?无脑解释new了之后(创建实例)就是构造函数
function TheFunc(){
}
TheFunc.prototype.name="iwen";
TheFunc.prototype.age = "30"
let func = new TheFunc();
console.log(func.constructor)--TheFunc(){}
3、__proto__原型链 逐级向上寻找,直到最后一个没有__proto__寻找结束(最简单的原型链解释)
4、异步-异步分为宏任务,微任务,微任务执行在宏任务前面,什么是宏任务?如:setTimeout(()=>{}) 什么是微任务如new Promise((resolve,reject)=>{})
5、为何报错b is not defined?以下代码最佳解释-js垃圾回收机制,运行完函数,将会销毁局部变量,b存在的地方是local,而a存在的地方是script,运行完函数后b已经被销毁掉了(函数外部访问不到内部变量的原理其实就是垃圾回收机制)
let a = 2
function thisFunc (){
let b = 1;
console.log(a)
}
thisFunc()
console.log(b)
6、非严格模式,如下代码,声明顺序
()(function(){
var a = b = 10
})
console.log(a)
console.log(b)
//分解上述函数:b=10; var a=b
b在非严格模式下并未声明,则全局变量b = 10;
b的值不会被js销毁,而a的值是局部变量将会被销毁
7、变量提升函数优先var声明,如下输出func is not a funcation---公式var func ---> func = function func ----> func = 123
var --- func同名函数 都将预解析
var func = 123
function func(){
console.log(func)
func = 456
console.log(func)
}
func()
(function d (num){console.log(num);var num = 20;function num(){}})(100)
//输出顺序
function d(num){
var num;
num = function num(){
}
console.log(num)
num = 20
}
d(100)
//由于function同名始终是最高的执行级,自然结果将是function
那么什么时候不会触发预解析呢?
代码块中将不触发预解析,如下
function a (){
console.log(a1)
console.log(a2)
console.log(b1)
console.log(b2)
if(false){
var a1 = 10;
function b1(){}
}
if(true){
var a2 = 100;
function b2(){}
}
console.log(a1)
console.log(b1)
console.log(a2)
consol.log(b2)
}
a()
//var 声明 及 function声明都在块中,将不会存在预解析,执行了得才会有值
8、apply、call
apply调用方法 function.apply(obj,arg) ,将会改变function指针的指向(this)指向的是obj call调用方法function.call(obj,a,b......) 将会改变function指针指向(this)指向的是obj 区别:传参的方式不同,apply arg是一个数组,而call则是字符串
9、匿名函数写法
(function d(a){console.log(a)})(10)
等价于
(function d(a){console.log(a)}(10))
等价于
function d(a){
console.log(a)
}
d()

浙公网安备 33010602011771号