关闭

js 作用域和闭包1

标签: javascript作用域闭包
73人阅读 评论(0) 收藏 举报
分类:

1.执行上下文

范围:一段<script>或者一个函数

一段<script>会产生一个全局执行上下文:变量定义、函数声明;

一个函数会产生一个函数执行上下文:变量定义、函数声明、this、arguments;

//demo
console.log(a);  //  undefined
var a = 100;
fn('zhangsan');  //  'zhangsan'  20
function fn(name) {
  age =20;
  console.log(name, age);
  var age;
}                //  不推荐这么写

2.函数声明和函数表达式

fn();    //没错
function fn()  {
    //声明
}

fn1();   // 有错
var fn1 = function()  {
    //表达式
}

3.this

this要在执行时才能确认,定义时无法确认;

//demo
var a = {
    name : 'A',
    fn : function() {
        console.log(this.name);
    }
}
a.fn()    //    this == a
a.fn.call({name: 'B'});    //    this == {name: 'B'}
var fn1 = a.fn
fn1()    //    this == window

4.this使用的几种情况

  • 作为构造函数执行
  • 作为对象属性执行
  • 作为普通函数执行
  • call    apply    bind

//构造函数
function Foo(name){
  this = {}
  this.name = name
  return this
}
var f = new Foo('zhangsan')
//作为对象属性
var obj = {
  name : 'A',
  printName : function(){
    console.log(this.name)
  }
}
obj.printName()
//作为普通函数执行
function fn(){
  console.log(this)//Window
}
fn()
//call apply
function fn1(name,age){
  alert(name)
  console.log(this)
}
fn1.call({x:100},'zhangsan',20)
//band
var fn2 = function(name,age){
  alert(name)
  console.log(this)
}.bind({y:200})
fn2('zhangsan',20)

5.作用域

  • 没有块级作用域
  • 只有函数和全局作用域

//无块级作用域
if(true){
    var name = 'zhangsan';
}
console.log(name);
//函数和全局作用域
var a = 100;
function fn() {
    var a = 200;
    console.log('fn',a);
}
console.log('global', a);
fn();

6.作用域链

var a = 100;
function fn() {
    var b = 200;
    //    当前作用域没有定义的变量,即自由变量,去它的父级作用域去寻找,这个父级作用域是定义时的,不是执行时的
    console.log(a);
    console.log(b);
}
fn();

7.闭包

//demo
function F1() {
    var a =100;
    //返回一个函数
    return function () {
        console.log(a);
    }
}
//    f1得到一个函数
var f1 = F1();
var a = 200;
f1()  //  100

闭包使用的场景:函数作为返回值;函数作为参数传递

0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:3185次
    • 积分:153
    • 等级:
    • 排名:千里之外
    • 原创:7篇
    • 转载:22篇
    • 译文:2篇
    • 评论:0条