var a = b = 10;
(function(){
var a = b = 20
})()
console.log(b);//20
为啥是20
var a = b = 10;
var c
(function(){
var b = 20
var c = 20
})()
console.log(b);//10
console.log(c);//undefined
这又是为啥是10和undefined
因为var声明的变量是在最近的函数作用域的,当没有函数即指向window,第一题里b他没有声明,没有用var声明的变量 会成为全局变量。
第二题里面 函数里面的a b都是局部变量啊 不会对外面的变量造成改变
function f(y,z){
return this.x + y + z
}
var m = f.bind({x:1},2)
console.log(m(3));//6
为啥是6?我真的太蠢了,自己写过bind的实现还忘了机制
Function.prototype.myBind = function(context){
context = context || window;//保存住原始的改变this的目标context
context.fn = this;//保存初始调用者函数
let args = [...arguments].slice(1)//保存住原始的传过来的参数
return function Fn(){
return fn.apply(this instanceof fn?this:context,args.concat(...arguments))
}
}
第二次传入的参数会和第一次的合并
var a = 1111111111111111111110000;
var b = 1111
console.log(a + b);//1.1111111111111111e+24
JS Number的范围为:
-2^53 ------ 2^53 (包含边界);
(function f(){
function f(){return 1;}
return console.log(f());
function f(){return 2;}
})()
变量提升阿。。不但是提升函数名,还提升了里面的内容
区别
console.log(tem());//'hahha'
function tem(){
return 'hahha'
}
console.log(han);
var han = 100
var a = 10,b = 20,c = 30
++a;
a++;
var e = ++a + (++b) + (c++) + a++;
console.log(e);//77
输出为77,我选的78,这个问题不太清楚,这么看的话就算是括号括起来(),也是先赋值,再运算的
var c = 0
var a = (c++);
console.log(a);//0