博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript函数_函数作用域
阅读量:6829 次
发布时间:2019-06-26

本文共 1926 字,大约阅读时间需要 6 分钟。

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/twilight_karl/article/details/55670174

Function在JavaScript中函数是一种对象,函数名是指向对象的引用。可以用一下方式调用它

var fun = new Function(“参数”,”返回值”,”函数体”);

因此如果出现下面这种情况,就已很好理解了。第二个函数重写了第一个函数,可以理解为第二个对象覆盖了第一个对象。函数名只是引用,doAdd变量改变了引用的地址。

var doAdd = new Function(“iNum”, “alert(iNum + 20)”);

var doAdd = new Function(“iNum”, “alert(iNum + 10)”);

可以使用 ‘函数名.length’ 返回参数的数量:

//函数将输出1    function show(num){
alert(show.length); };

arguments

函数的一个内置属性。arguments类似一个数组,访问该函数的实参,实参的数目不一定等于形参

function show(x,y,z){
alert(arguments.length); //返回 4 alert(arguments[2]); //返回 c alert(show.length); //返回 3 arguments[0] = 'f'; alert(x); //返回 f }; show('a','b','c','d');

arguments.callee

返回此arguments对象所在的当前函数引用

比如,递归算法时函数本身,arguments.callee表示函数本身

//计算num的阶乘        function sum(num){
if(num<=1) { return 1; }else{ return num*arguments.callee(num-1); } } alert(sum(4));

函数的toString() 和 ValueOf()返回函数的源代码

call apply

改变函数的作用域

二者的异同:
apply() : 接收两个参数,一个是函数运行的作用域(this),另一个是参数数组。
call() : 第一个参数与apply()方法相同,但传递给函数的参数必须列举出来。

结果: hello tom —> hello Jerry

this

JavaScript中的this与c++中的不同,this可以改变,对于函数fun(),如果用obj.fun()调用他,那么函数fun中得this就是obj对象,但是call(),apply()可以改变函数中的this。例如:

fun.call(window);

fun.call(this); // 此时的this就是window
这时fun函数中的this变成了了window

作用域

函数A体内包含其他函数B,只有在函数A的作用域内才能调用B

没有块级作用域

if(){} 没有封闭作用域的功能

if(true){        var temp = "sss";    }    alert(temp);//结果是sss

for(;;){} i和内部的变量都是全局的

for(var i=0;i<10;i++){        var temps = "for";    }    alert("i:"+i+"temps:"+temps);//结果是i:10 temps:for

在函数中变量加上var是局部变量,不加var就是全局变量。函数使用变量时,先从本地的作用域中搜索,如果没有搜索到就到上一层作用域中搜素。所以,访问局部变量要比全局变量快

PS:

1,基本类型不能加属性(只有Object是引用)

2,基本类型保存在栈内存中,引用类型保存在堆内存中,基本类型的赋值时复制了整个内容,而引用类型的赋值只是地址的复制
3,所有函数的参数都是按值传递的,对象传的值是地址因此外部的对象也会变化
4,instanceof 类型 判断类型不能检查基本类型

你可能感兴趣的文章
这里有一份面筋请查收(三)
查看>>
关于EDM邮件涉及的MX记录、A记录和反向解析
查看>>
DOM的innerHTML
查看>>
代码片段
查看>>
创建vue项目
查看>>
5G来临,有视频源码,一对一交友源码,直播行业要变天?
查看>>
mvc:annotation-driven涉及HttpMessageConverters的源码
查看>>
JS-数据类型-对象Object
查看>>
如何使用 rsync 的高级用法进行大型备份
查看>>
流计算框架 Flink 与 Storm 的性能对比
查看>>
全站HTTPS升级系列(三)nginx配置全站HTTPS
查看>>
自定义滚动条的实现思路与关键算法
查看>>
ES6 - 变量的解构赋值解析
查看>>
建立自己的编程世界
查看>>
起早贪黑几个月,我写完了人生第一本书!
查看>>
let、const、var
查看>>
JavaScript Promise 对象
查看>>
Stylus在VUE2.0以上的使用
查看>>
Android:Activity与Fragment、Service之间的数据通信
查看>>
深入理解-字符编码ASCII,GB2312,GBK,Unicode,UTF-8
查看>>