javascript - 直接为变量赋值一个函数和引用一个函数有什么区别?

查看:79
本文介绍了javascript - 直接为变量赋值一个函数和引用一个函数有什么区别?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

直接为变量赋值一个函数和引用一个函数有什么区别?

如:片段1和片段2

片段1

function fn(){
  var box = document.getElementById("box");
  box.onclick = function(){
      console.log(111);
  };
  box = null;
}

片段2

function fn(){
  var box = document.getElementById("box");
  box.onclick = click;
}

function click(){
  console.log(111);
}

片段1中onclick里面的函数允许访问fn中的变量,而片段2中的onclick函数不允许访问fn中的变量,我是这样想的,因为片段2中的click由于是在fn外部定义的所以无法访问fn中的变量,那么也就是说在片段2中为onclick赋值实际上是引用而非拷贝?

解决方案

不不不, 你又不是调用方法, 传递参数, 所以这两个例子的核心不是什么引用/拷贝的问题

这是作用域(原型链)的问题

变量在不同的作用域有不同的访问权限:
子作用域能访问父作用域
父作用域不能访问子作用域
同级作用域无法互相访问

这篇关于javascript - 直接为变量赋值一个函数和引用一个函数有什么区别?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆