JS函数本身的作用域实例分析

JS函数本身的作用域实例分析

在JS中,函数拥有自身的作用域,也可以使用父级作用域中的变量。函数本身的作用域指的是在其内部可以访问的变量和函数。本文将详细讲解JS函数本身的作用域,以及两个具体的实例分析。

1. 函数内部作用域

函数内部可以访问的变量有两种,分别是自有变量和父级变量。

1.1 自有变量

自有变量指的是函数内部定义的变量,只能在函数内部访问。例如下面的代码片段:

function demo() {
  var name = '张三';
  console.log(name);
}

demo(); // 输出 '张三'
console.log(name); // 抛出错误,name未定义

在函数内部定义了名为 name 的变量,这个变量只能在函数内部使用,无法在外部访问到。

1.2 父级变量

在函数内部还可以访问到父级作用域内的变量,这种作用域链的是因为JS采用了词法作用域。例如下面的示例:

var age = 18;

function demo() {
  console.log(age);
}

demo(); // 输出 18

函数内部并没有定义变量 age,但是由于函数的父级作用域是全局作用域,所以可以在函数内部访问到全局变量 age 的值。

2. 函数自身作用域

函数本身的作用域是在函数定义时确定的。可以在在函数内部使用自有变量和访问父级变量,但是无法在函数外部访问这些变量。下面是一个示例:

function demo() {
  var name = '张三';

  function inner() {
    console.log(name);
  }

  inner(); // 输出 '张三'
}

demo();
console.log(name); // 抛出错误,name未定义

在函数内部定义了一个名为 inner 的函数,这个函数可以访问到外层 demo 函数内部定义的变量 name,输出了变量的值。而在函数外部访问变量 name 会抛出错误。

3. 示例分析

3.1 示例一:使用闭包实现计数器功能

闭包可以访问到创建它的函数的内部变量,在这个例子中,利用函数本身的作用域和闭包的特性,实现了一个计数器:

function counter() {
  var num = 0;

  return function() {
    num ++;
    console.log(num);
  }
}

var c1 = counter();
c1(); // 输出 1
c1(); // 输出 2
c1(); // 输出 3

var c2 = counter();
c2(); // 输出 1
c2(); // 输出 2

counter 函数内部定义了一个变量 num,并且返回了一个闭包,这个闭包可以访问到 num 变量。在外部多次调用闭包,每次都能够更新 num 的值并输出。

3.2 示例二:使用匿名函数实现模块化

利用函数本身的作用域可以实现模块化开发,通过匿名函数的方式可以模拟出模块的功能:

var module = (function() {
  var name = 'module';

  function getName() {
    return name;
  }

  return {
    getName: getName
  }
})();

console.log(module.getName()); // 输出 'module'

在示例中,利用匿名函数自身作用域的特性,定义了一个名为 module 的变量,并且返回了一个对象,这个对象包含了用于外部调用的函数 getName。在外部调用 module.getName() 可以输出 'module'。这种方式可以模拟出一个独立的模块,避免了全局变量的污染。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS函数本身的作用域实例分析 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • JS中的form.submit()不能提交表单的错误原因

    在JavaScript中,我们可以使用form.submit()方法来提交表单。但有时会发现这种方式并不起效,而导致表单无法成功提交,接下来我将详细讲解JS中的form.submit()不能提交表单的错误原因,包括以下两个方面: 没有对表单元素进行正确的提交操作 使用form.submit()方法时,需要确保表单元素的属性和值都设置正确。如果其中存在错误,则…

    JavaScript 2023年6月10日
    00
  • JS弹出窗口的运用与技巧大全

    JS弹出窗口的运用与技巧大全 作为开发者,JS弹出窗口是我们常常需要使用的一个常规界面,本文将全面介绍JS弹出窗口的运用,并提供一些技巧,让你可以轻松掌握这个常用的技能。 简介 JS弹出窗口可以在页面中弹出一个新的窗口,常用于显示提示信息、警告信息,以及展示图片等。JS弹出窗口主要分为以下几种: alert:用于弹出简单的警告信息。 confirm:用于提示…

    JavaScript 2023年6月11日
    00
  • JavaScript阻止事件冒泡的方法

    JavaScript中阻止事件冒泡是前端开发过程中常见的需求。事件冒泡是指当一个元素上的事件被触发时,它会向父级元素传递,直到最顶层的元素。在某些情况下,我们需要阻止这种事件冒泡,使事件只在当前元素上执行。以下是阻止事件冒泡的三种方法: 方法一:使用event.stopPropagation 在事件回调函数中使用event.stopPropagation可以…

    JavaScript 2023年6月10日
    00
  • JS实现简单网页倒计时器

    下面我将详细讲解一下如何通过JS实现简单网页倒计时器。 1. 首先,我们需要创建一个HTML页面 在HTML文件中,我们需要定义一个显示倒计时的区域,并为它设置一个id,例如: <div id="countdown"></div> 2. 然后,在JavaScript代码中,我们需要定义倒计时的时间和计时器函数 例如…

    JavaScript 2023年5月27日
    00
  • JavaScript中valueOf函数与toString方法深入理解

    JavaScript中valueOf函数与toString方法深入理解 JavaScript中的对象可以通过自身的函数或方法转换为原始值。其中,valueOf函数和toString方法都可以用来实现此目的。本文将深入探讨valueOf函数与toString方法的区别、使用场景、如何自定义和优先级等问题,并通过示例说明它们的使用方法。 区别 valueOf v…

    JavaScript 2023年5月27日
    00
  • javascript数组中的findIndex方法

    JavaScript数组中的findIndex方法 findIndex() 是JavaScript Array 中的一个非常实用的方法,主要用于查找数组中满足指定条件的元素的下标。 语法 array.findIndex(callback(element[, index[, array]])[, thisArg]) 参数 callback: 索引的函数,接受3…

    JavaScript 2023年5月27日
    00
  • js实现拖动缓动效果

    实现拖动缓动效果,需要用到JavaScript中的定时器和数学运算等技术。下面我来详细讲解一下整个过程。 第一步:获取元素位置 首先,我们需要获取需要拖动的元素以及它的位置。在代码中,我们通常会使用getBoundingClientRect()方法来获取元素的绝对位置。 const dragElem = document.querySelector(‘.dr…

    JavaScript 2023年6月10日
    00
  • Web程序员必备的7个JavaScript函数

    当今Web开发的世界中,JavaScript是不可或缺的一个重要工具。因此,作为Web程序员,熟练掌握JavaScript,并掌握一些实用的JavaScript函数是非常重要的。 下面是Web程序员必备的7个JavaScript函数的详细攻略: 1. String.prototype.trim() JavaScript字符串对象的trim()函数用于删除字符…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部