2022/3/1

一、JavaScript

1、window return问题

1.1把a变量甩到全局去了。

function abc() {
  window.a = 3
}
abc()
console.log(a)//3 可以访问到a

思考:return能不能通过window实现这个功能呢

function test() {
  var a = 1
  function add() {
    a++
    console.log(a)
  }
  window.add = add//把add函数保存给了全局变量add
}
test()
add()//2
add()//3
add()//4

上面也形成了闭包。也就是return和window可以实现同样的功能。

1.2让一个变量等于一个立即执行函数,函数内部返回一个add内部的函数。然后把函数add交给变量add,保存到了全局。

var add = (function test() {
  var a = 1
  function add() {
    a++
    console.log(a)
  }
  return add //return出去以后,总是要有个全局变量去保存。
})()
add() //2
add() //3
add() //4

1.2.1用window把它丢出去,执行

(function test() {
  var a = 1
  function add() {
    a++
    console.log(a)
  }
  window.add = add //return出去以后,总是要有个全局变量去保存。
})()
add() //2
add() //3
add() //4

总结:return必须把内部的函数赋值给一个全局变量,然后通过全局变量来执行这个函数。

**而window不需要,直接window.add就是全局变量。直接在函数的内部就可以保存。保存以后直接在外界就可以执行。**这就是区别

2、js插件的写法

最外层有一个立即执行函数,然后写一个构造函数,最后把构造函数保存在window的一个变量。

在外界就可以new的到。

(function(){
    function Test(){
        
    }
    window.Test=Test
})()
var test =new Test();

外层写立即执行函数,是为了防止变量污染。包括函数作用域的污染。

外层用一个立即执行函数包括,可以把作用域限制到内部。外界无法访问。

下面报错:

(function () {})()
  (function () {})()
  (function(){})()

这样就不报错了

;(function () {})()
;(function () {})()
;(function () {})()

只有表达式才可以立即执行。

+ function(){
console.log(1)
}();

作业:写一个插件,任意传两个数字,调用插件内部方法进行加减乘除功能。

 ;(function () {
      function Test(opt) {
        this.firstNum = opt.firstNum
        this.secondNum = opt.SecondNum
      }
      Test.prototype = {
        plus: function () {
          console.log(this.firstNum + this.secondNum)
        },
        minus: function () {
          console.log(this.firstNum - this.secondNum)
        },
        muls: function () {
          console.log(this.firstNum * this.secondNum)
        },
        div: function () {
          console.log(this.firstNum / this.secondNum)
        }
      }
      window.Test = Test
    })()
    var test = new Test({
      firstNum: 4,
      secondNum: 2
    })
    test.plus()
    test.minus()
    test.muls()
    test.div()

输出一直是NaN。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值