朗国科技面试题

7 篇文章 0 订阅
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
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值