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 变量的作用域的更多相关文章

  1. JavaScript高级程序设计学习(三)之变量、作用域和内存问题

    这次讲的主要是变量,作用域和内存问题. 任何一门编程语言,都涉及这三个. 变量,比如全局变量,局部变量等,作用域,也分全局作用域和方法作用域,内存问题,在java中就涉及到一个垃圾回收的问题,由于ja ...

  2. JavaScript函数定义和调用 变量作用域

     本文是笔者在看廖雪峰老师JavaScript教程时的个人总结   JavaScript中函数定义可以是这样的格式 function 函数名(参数) {     函数体 } 也可以是这样的格式     ...

  3. JavaScript 一、 ES6 声明变量,作用域理解

    // JavaScript/* * ========================================================= * * 编译原理 * 尽管通常将 JavaScr ...

  4. javascript 函数初探 (四)--- 回调函数

    回调函数 既然函数与任何被赋值给变量的数据是相同的,那么她当然可以像其他数据那样被定义.删除.拷贝,以及当成参数传递给其它函数. 我们定义一个函数,这个函数有两个函数类型的参数,然后他会分别执行这两个 ...

  5. 【javascript基础】3、变量和作用域

    前言 这篇和大家说一下javascript中的变量和作用域,由于是将基础嘛,主要给大家捋一下知识,不想翻开书复习的道友可以看一下,打算刚开始学习javascript的同学可以扫一眼. PS:jQuer ...

  6. JavaScript(第十一天)【变量,作用域,内存】

    JavaScript的变量与其他语言的变量有很大区别.JavaScript变量是松散型的(不强制类型)本质,决定了它只是在特定时间用于保存特定值的一个名字而已.由于不存在定义某个变量必须要保存何种数据 ...

  7. JavaScript(五):变量的作用域

    一.变量的分类 在JavaScript中变量分为两种: 全局变量 局部变量 二.变量的作用域 1.局部变量的作用域 局部变量:在函数内部定义的变量称为局部变量,其作用域为该函数内部,在该函数外部不能被 ...

  8. javascript 函数初探 (一)--- 神马是函数

    神马是函数? 所谓函数,本质上是一种代码的分组形式.我们可以通过这种形式赋予某组代码一个名字,以便与之后的调用.下面,我们来示范以下函数的声明: function sum(a, b){ var c = ...

  9. javascript 函数初探 (五)--- 几种类型的函数

    即时函数: 目前我们已经讨论了匿名函数在回调时的应用.接下来,我们来看看匿名函数的另一种应用实例 --- javascript即时函数: 比如: ( function(){ alert('her'); ...

随机推荐

  1. Android CTS - Cannot run program "aapt"/ Fail to run aapt on .../apk installed but AaptParser failed

    今天同事碰到cts的一些问题,跑到某个apk的时候,就提示如下错误: Cannot run program "aapt": error=2. No such file or dir ...

  2. Mime类型与文件后缀对照表及探测文件MIME的方法

    说明:刚刚写了一篇<IHttpHandler的妙用(2):防盗链!我的资源只有我的用户才能下载>的文章,网址:http://blog.csdn.net/zhoufoxcn/archive/ ...

  3. TPS限流

    限流是高可用服务需要具备的能力之一 ,粗暴简单的就像我们之前做的并发数控制.好一点的有tps限流,可用令牌桶等算法实现.<亿级流量网站架构核心技术>一书P67限流详解也有讲.dubbo提供 ...

  4. SCOI 2010 滑雪

    题目描述 a180285非常喜欢滑雪.他来到一座雪山,这里分布着 MM 条供滑行的轨道和 NN 个轨道之间的交点(同时也是景点),而且每个景点都有一编号 ii ( 1 \le i \le N1≤i≤N ...

  5. 1章 perl入门

    1.标量数据    单变量    数字和字符串两种情况 2.所有数字的内部格式都相同.浮点型   perl中没有应对整数值得运算   . 3.浮点数直接量 数字e表示10的次方标示符 例子:-6.5e ...

  6. Leetcode 424.替换后的最长重复字符

    替换后的最长重复字符 给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次.在执行上述操作后,找到包含重复字母的最长子串的长度. 注意:字符串长度 和 ...

  7. [错误处理]python大小写敏感,关键字不要写错

    今天调试程序,发现了一个极为隐蔽的bug. True False关键字大小写写错了,然后半天没找出问题所在.

  8. HDU-3592 World Exhibition

    差分约束. 很容易看出两种约束方式,然后建图.而且题目要求排序不能乱,于是加上第三种约束. 求最长就跑一遍最短路啊就行了. #include <cstdlib> #include < ...

  9. 开源 project

    移动:http://www.csdn.net/article/2014-04-22/2819435-facebook-mobile-open-source-projects/1

  10. codeforces 449D DP+容斥

    Jzzhu and Numbers Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u ...