JavaScript函数_函数作用域

简介: 版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/twilight_karl/article/details/55670174 Function在JavaScript中函数是一种对象,函数名是指向对象的引用。
版权声明:本文为博主原创文章,转载请注明出处。 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()方法相同,但传递给函数的参数必须列举出来。

<script>
    var name = "tom";

    function show(){
        alert("hello "+this.name);  //this必须加上,否则会成为全局变量
    }

    var obj = {
        name:"jerry"
    }

    show.call(window);
    show.call(obj);

</script>

结果: 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

    <script>
        function A(){
            B();
            function B(){
                alert("This is function B");
            }
        }
        A();
    </script>

没有块级作用域

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 类型 判断类型不能检查基本类型

相关文章
|
7天前
|
JavaScript 前端开发
javascript的作用域
【10月更文挑战第19天javascript的作用域
|
12天前
|
JavaScript 前端开发
JavaScript 作用域
JavaScript 作用域是指程序中可访问的变量、对象和函数的集合。它分为函数作用域和局部作用域。函数作用域内的变量仅在函数内部可见,而全局作用域的变量在整个网页中均可访问。局部变量在函数执行完毕后会被销毁,而全局变量则在整个脚本生命周期中都存在。未使用 `var` 关键字声明的变量默认为全局变量。
|
12天前
|
JavaScript 前端开发
JavaScript 函数语法
JavaScript 函数是使用 `function` 关键词定义的代码块,可在调用时执行特定任务。函数可以无参或带参,参数用于传递值并在函数内部使用。函数调用可在事件触发时进行,如用户点击按钮。JavaScript 对大小写敏感,函数名和关键词必须严格匹配。示例中展示了如何通过不同参数调用函数以生成不同的输出。
|
14天前
|
存储 JavaScript 前端开发
JS函数提升 变量提升
【10月更文挑战第6天】函数提升和变量提升是 JavaScript 语言的重要特性,但它们也可能带来一些困惑和潜在的问题。通过深入理解和掌握它们的原理和表现,开发者可以更好地编写和维护 JavaScript 代码,避免因不了解这些机制而导致的错误和不一致。同时,不断提高对执行上下文等相关概念的认识,将有助于提升对 JavaScript 语言的整体理解和运用能力。
|
23天前
|
JavaScript 前端开发
js教程——函数
js教程——函数
21 4
|
2月前
|
JavaScript 前端开发 安全
JavaScript函数详解
JavaScript函数的详细解析,包括函数的定义和调用方式(如一般格式、匿名函数、构造函数、自调用函数、箭头函数和严格模式)、函数参数(arguments对象、可变参数、默认参数值)、闭包的概念和应用实例。
JavaScript函数详解
|
22天前
|
存储 JavaScript 前端开发
js中函数、方法、对象的区别
js中函数、方法、对象的区别
14 2
|
25天前
|
JavaScript 前端开发 Java
【javaScript数组,函数】的基础知识点
【javaScript数组,函数】的基础知识点
22 5
|
24天前
|
JavaScript 前端开发
Node.js 函数
10月更文挑战第5天
19 3
|
28天前
|
前端开发 JavaScript
探索JavaScript函数基础
探索JavaScript函数基础
16 3