函数名的提升,属性和方法

JavaScript引擎将函数名视同变量名,采用function命令声明函数时,整个函数会被提升到代码头部。

var sum = add(1, 2);
    console.log(sum);
    function add(x, y) {
    return x + y;
    }
    以上代码由于“变量提升”,函数f被提升到了代码头部,在调用之前就已经声明了。采用赋值语句定义函数就会报错。
    如果同时采用function命令和赋值语句声明同一个函数,最后总是采用赋值语句的定义。

name属性:返回紧跟在function关键字之后的那个函数名。

function fn1() {}
        console.log(fn1.name);
        var fn2 = function() {};
        console.log(fn2.name);
        var fn3 = function fn3() {};
        console.log(fn3.name);

length属性:返回函数定义中参数的个数。

function fn(x, y) {}
        console.log(fn.length);

函数作用域

作用域指的是变量存在的范围。一种是全局作用域,变量在整个程序中一直存在;另一种是函数作用域,变量只在函数内部存在。
        (1) 在函数外部声明的变量就是全局变量(global variable),它可以在函数内部读取。
        (2) 在函数内部定义的变量,外部无法读取,称为“局部变量”(local variable)。
        (3) 函数内部定义的变量,会在该作用域内覆盖同名全局变量。

函数内部的变量提升

与全局作用域一样,函数作用域内部也会产生“变量提升”现象。var命令声明的变量,不管在什么位置,变量声明都会被提升到函数体的头部。

函数本身的作用域
        函数本身也是一个值,也有自己的作用域。它的作用域绑定其声明时所在的作用域。

时间: 2024-10-14 00:43:07

函数名的提升,属性和方法的相关文章

打印文件名、函数名和行号的方法

java打印文件名.函数名和行号的方法:Log.d(TAG, new Exception().getStackTrace()[0].getMethodName()); //函数名 Log.d(TAG, Thread.currentThread().getStackTrace()[2].getMethodName()); //函数名 Log.d(TAG, ""+Thread.currentThread().getStackTrace()[2].getLineNumber()); //行号

《JS权威指南学习总结--8.7 函数属性、方法和构造函数》

内容要点:   在JS程序中,函数是值.对函数执行typeof运算会返回字符串 "function",但是函数是JS中特殊的对象.因为函数也是对象,它们也可以拥有属性和方法,就像普通的对象可以拥有属性和方法一样.甚至可以用Function()构造函数来创建新的函数对象. 一.length属性     在函数体内,arguments.length表示传入函数的实参的个数.    而函数本身的length属性则有着不同含义.函数length属性是只读属性,它代表函数实参的数量,这里的参数指

python 动态获取当前运行的类名和函数名的方法

一.使用内置方法和修饰器方法获取类名.函数名 python中获取函数名的情况分为内部.外部,从外部的情况好获取,使用指向函数的对象,然后用__name__属性 复制代码代码如下: def a():passa.__name__ 除此之外还可以: 复制代码代码如下: getattr(a,'__name__') 尽管有些脱裤子放屁,总之,从外部获取的方法是非常灵活的. 有些同学需要从函数内部获取函数本身的名字,就需要用些技巧了.1.使用sys模块的方法: 复制代码代码如下: def a():print

Python 获取对象的属性和方法—dir 函数

工作中,我们使用一些之前没用到过的模块,使用时需要了解一下这个模块中的一些类的方法或属性,怎么做呢?目前我比较常用的两款IDE“Pycharm”和“VSCode”,都可以通过先导包,然后通过“Ctrl+鼠标左键”,进入源码后观看并膜拜一下大神们的代码,当然也可以进入我们在项目中自己所定义的,然后进行快速修改,真的是很方便呢.但是有的时候,我们使用的环境没有这类的IDE,那该怎么学习我们要用的这些类方法和属性呢?方法当然很多,无论是小白,还是大神,百度谷歌大法都是比较快速和方便的.但是对于一些刚开

C++ DLL导出函数的两种方法(导出序号那种方法,别人看不到函数名)

第一种就直接导出函数名如下代码: #ifdef__cplusplus #define TEXPORT extern "c" _declspec(dllexport) #dlse #define TEXPORT _declspec(dllexport) TEXPORT BOOL FUN();//这就是要导出函数 这种方法查看DLL时能看到函数名. 第二种是就导出序号如下代码: bool _stdcall fun(); 在工程右键添加新项目点模块定义文件.DEF, 在在DEF文件里写 LI

js中变量名提升和函数名提升

首先,js中变量没有块级作用域,但是有函数作用域,即只有函数可以约数变量的作用域. 并且,函数的实质也是一个变量,所以可以改变它的值,即赋值.所以变量名提升和函数名提升非常相像. 1.变量名的提升发生在函数内部.看下面的例子.说明:第一个因为弹出undefined,相当于在上面定义了var num;因为函数内部,定义了var num=20:就相当于在一开始定义了var num;这就是变量名的提升. var num = 10; function func() { alert(num); //und

函数属性和方法:length和prototype

ECMAScript中的函数是对象,因此函数也有属性和方法.每个函数都包含两个属性:ength和prototype. 其中, length属性表示函数希望接收的命名参数的个数 . function box1(name,sex){ return name+sex; } alert(box1.length); PS: 对于prototype属性, 它是保存所有实例方法的真正所在, 也就是原型. 这个属性,我们将在面向对象一章详细介绍. 而prototype下有两个方法: apply()和call()

C/C++ 打印文件名、行号、函数名的方法

转自:http://blog.csdn.net/cabinriver/article/details/8960119 今天跟踪一段开源代码的时候,因为对代码不太熟悉,所以要打印一些关键的信息.便顺手整理了一下这个能打印文件名.行号.函数名的宏. 1.打印文件名.行号.函数的两种方式 [cpp] view plain copy /************************************************************************** *  @Copyri

JS学习之函数内部属性和方法

知识点:arguments和this对象.caller属性.apply()和call()方法     arguments对象:函数内部对象,传入函数中所有参数的集合,类数组对象 属性:callee 指针,指向拥有这个arguments对象的函数  作用:解耦 例子:迭代 function factorial(num) { if(num<=1){ return 1; }else{ return ( num*arguments.callee(num-1)); } } console.log(fact