javascript 函数初探 (三)--- javascript 变量的作用域
javascript 变量的作用域:
这是一个至关重要的问题。特别是当我们从别的语言转向javascript时,必须要明白一点,即在javascript中,变量的定义并不是以代码块作为作用域的,而是以函数作为作用域。也就是说变量是在某个函数中定义的,那么她在函数以外的地方是不可见的。而如果函数是定义在if或for这样的代买块中,那么她随处可见。
全局变量:是定义在所有函数只外的变量。相反局部变量则是定义在某个函数中。其中,函数内的代码可以像访问自己的局部变量一样访问全局变量,反之则不可以。
; function her(){ ; num++; return num; } her(); her(); count // count is not defined
这里还有一点非常重要,如果我们声明变量时没有使用var语句,该变量就会默认为全局变量:
function her(){ num = ; } num; // undefined her(); num;
看看发生了什么:在函数被调用之前num是不存在的,该变量num在函数首次被调用的时候创建,并被赋予全局作用域,这会使得我们在函数之外的任何地方去访问它。
注:最好总是使用var语句来声明变量。
可以考虑使用单一'var模式'例:
, c=true, d;
这样一来,我们可以在很大程度上减少污染全局变量。\(^o^)/YES!
函数也是数据:
在javascript中,函数其实也是一种数据。也就是说我们可以把函数赋给一个变量。
var her = function(){ return 'Hello' }
这种定义方式通常被叫做‘函数标识记法’。
上面是一个函数表达式。函数表达式可以被命名,称为命名函数表达式:
var f = function her(){ return 'Hello' }
这种方式也是合法的,但我们常常不会用到。(在这里her是函数的名字,而不是变量。IE会错误的创建f, her两个变量)。
这样看起来,命名函数表达式和函数声明并没有神马区别。但她们其实是不同的。两者的差别表现于她们所在的上下文。函数声明只会出现在程序代码里(在一个函数的函数体内,或在程序主体中)。
// 函数声明 function her1(){ '; } // 命名函数表达式 { '; } alert(typeof her1) // function alert(typeof her2) // function
所以,javascript中的函数也是一种数据类型,只不过她有两种特性:
1. 她们所包含的是代码。
2. 她们是可执行的(可调用的)。
如何向变量那样使用函数?
var her = function(a, b){ return a + b; } var beauty = her; alert(typeof beauty); // function beauty(, );
所以函数的命名规则与变量的命名规则是一样的。<( ̄︶ ̄)>~~~~~~
匿名函数:
我们可以这样定义一个函数:
var f = function her(a){ return a; }
通过这种方式定义的函数常被称为匿名函数(即没有名字的函数),特别是当她不被赋值给变量单独使用的时候。在这种情况下,她有两种优雅的用法:
1. 您可以将匿名函数作为参数传递给其它函数,这样,接受方函数就能利用我们所传递的函数来完成某件事情。
2. 您可以定义某个匿名函数来执行某些一次性任务。
下一回我们详细探讨一下匿名函数的用法 <( ̄︶ ̄)>~~~~~~
javascript 函数初探 (三)--- javascript 变量的作用域的更多相关文章
- JavaScript高级程序设计学习(三)之变量、作用域和内存问题
这次讲的主要是变量,作用域和内存问题. 任何一门编程语言,都涉及这三个. 变量,比如全局变量,局部变量等,作用域,也分全局作用域和方法作用域,内存问题,在java中就涉及到一个垃圾回收的问题,由于ja ...
- JavaScript函数定义和调用 变量作用域
本文是笔者在看廖雪峰老师JavaScript教程时的个人总结 JavaScript中函数定义可以是这样的格式 function 函数名(参数) { 函数体 } 也可以是这样的格式 ...
- JavaScript 一、 ES6 声明变量,作用域理解
// JavaScript/* * ========================================================= * * 编译原理 * 尽管通常将 JavaScr ...
- javascript 函数初探 (四)--- 回调函数
回调函数 既然函数与任何被赋值给变量的数据是相同的,那么她当然可以像其他数据那样被定义.删除.拷贝,以及当成参数传递给其它函数. 我们定义一个函数,这个函数有两个函数类型的参数,然后他会分别执行这两个 ...
- 【javascript基础】3、变量和作用域
前言 这篇和大家说一下javascript中的变量和作用域,由于是将基础嘛,主要给大家捋一下知识,不想翻开书复习的道友可以看一下,打算刚开始学习javascript的同学可以扫一眼. PS:jQuer ...
- JavaScript(第十一天)【变量,作用域,内存】
JavaScript的变量与其他语言的变量有很大区别.JavaScript变量是松散型的(不强制类型)本质,决定了它只是在特定时间用于保存特定值的一个名字而已.由于不存在定义某个变量必须要保存何种数据 ...
- JavaScript(五):变量的作用域
一.变量的分类 在JavaScript中变量分为两种: 全局变量 局部变量 二.变量的作用域 1.局部变量的作用域 局部变量:在函数内部定义的变量称为局部变量,其作用域为该函数内部,在该函数外部不能被 ...
- javascript 函数初探 (一)--- 神马是函数
神马是函数? 所谓函数,本质上是一种代码的分组形式.我们可以通过这种形式赋予某组代码一个名字,以便与之后的调用.下面,我们来示范以下函数的声明: function sum(a, b){ var c = ...
- javascript 函数初探 (五)--- 几种类型的函数
即时函数: 目前我们已经讨论了匿名函数在回调时的应用.接下来,我们来看看匿名函数的另一种应用实例 --- javascript即时函数: 比如: ( function(){ alert('her'); ...
随机推荐
- 【报错】invalid or unexpected token
结果发现是把英文的,写成了中文字符,系统没法识别.
- RQNOJ:PID30 / [stupid]愚蠢的矿工☆(树形背包)
PID30 / [stupid]愚蠢的矿工☆ 背景 Stupid 家族得知在HYC家的后花园里的中央花坛处,向北走3步,向西走3步,再向北走3步,向东走3步,再向北走6步,向东走3步,向南走12步,再 ...
- luogu2580 于是他错误的点名开始了 Trie树
模板题 #include <iostream> #include <cstring> #include <cstdio> using namespace std; ...
- 转:模式窗口showModalDialog的用法总结
模式窗口showModalDialog的用法总结 最近几天一直在处理模式窗口的问题,索性写了这篇总结,以供参考: 1.打开窗口:var handle = window.showModalDialo ...
- python - unitest - 实战题目
'''题目要求 1:自己写一个工具类,完成数学的加减乘除以及平方积操作2:对每个方法写2个用例3:针对测试用例选用不同的方法去执行,然后生成测试报告''' '''实现: 3个文件: work_2018 ...
- selenium - 下拉框操作
# 9. 下拉框操作# (1)等待下拉列表和下拉列表中值存在# (2)在下拉列表中选择一个值 # 三种方式# A. 获取所有的下拉列表值,然后用循环去匹配相同的值 select_by_index(下标 ...
- SDOJ 3696 Tree
描述 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树. 题目保证有解. 输入 第一行V,E,need分别表示点数,边数和需要的白色边数. 接下来E行 每行 ...
- 【转】简要分析unity3d中剪不断理还乱的yield
在学习unity3d的时候很容易看到下面这个例子: 1 void Start () { 2 StartCoroutine(Destroy()); 3 } 4 5 IEnumerator Destroy ...
- 《Spark Python API 官方文档中文版》 之 pyspark.sql (四)
摘要:在Spark开发中,由于需要用Python实现,发现API与Scala的略有不同,而Python API的中文资料相对很少.每次去查英文版API的说明相对比较慢,还是中文版比较容易get到所需, ...
- C++之Effective STL学习笔记Item20
Q:假设我们现在需要一个string*的set,我们向其插入一些动物到这个set中: set<string*> ssp; // ssp = “set of string ptrs” ssp ...