JavaScript 函数调用时带括号和不带括号的区别

function countBodyChildren(){
    var body_element = document.getElementsByTagName("body")[0];
    alert(body_element.childNodes.length);
}

window.onload = countBodyChildren;
//window.onload = countBodyChildren();

代码功能:在弹出框显示body元素的子元素。

不带括号为9;

带括号为8,在加载完成后为9;

那么到底在使用一个函数时需不需要加上()呢?

  函数只要是要调用它进行执行的,都必须加括号。此时,函数实际上等于函数的返回值或者执行效果,当然,有些没有返回值,但已经执行了函数体内的行为,就是说,加括号的,就代表将会执行函数体代码。

  不加括号的,都是把函数名称作为函数的指针,一个函数的名称就是这个函数的指针,此时不是得到函数的结果,因为不会运行函数体代码。它只是传递了函数体所在的地址位置,在需要的时候好找到函数体去执行。

  例如window.onload=countBodyChildren;

  countBodyChildren函数并不会在这行代码时就执行,浏览器加载文档时这句话会被加载,会被告知文档加载完要执行哪个函数,但实际上没有当时就执行,等到整个文档加载完成之后才会通过init这个指针去执行init()。

所以一般时候我们都是采用的是无括号的原因。这也是由于括号的二义性,因为括号是“函数调用运算符”,相当于在执行这样一个函数,所以产生的问题在理解了之后也就理解了。

时间: 2025-01-12 08:43:46

JavaScript 函数调用时带括号和不带括号的区别的相关文章

使用装饰器时带括号与不带括号的区别

之前我们在一个用于统计函数调用消耗时间的装饰器中写了一个装饰器,用于统计函数调用时间.代码如下: from time import time from time import sleep def count_time(): def tmp(func): def wrapped(*args, **kargs): begin_time = time() result = func(*args, **kargs) end_time = time() cost_time = end_time - beg

js中new函数后带括号和不带括号的区别

用new创建构造函数的实例时,通常情况下new 的构造函数后面需要带括号(譬如:new Parent()). 有些情况下new的构造函数后带括号和不带括号的情况一致,譬如: function Parent(){this.num = 1;}console.log(new Parent());//输出Parent对象:{num:1}console.log(new Parent);//输出Parent对象:{num:1} 1 1 function Parent(){ 2 2 this.num = 1;

javascript变量声明带var和不带var的区别

javascript变量声明带var和不带var的区别:在javascript中,声明变量可以使用var也可以不用使用var,下面就介绍一下这两者的区别.一.作用域的区别:不使用var声明的变量的作用域是全局性的,无论是否声明在函数的内部.使用var声明的变量的时候,如果是在函数外部声明的那么就是全局性的,在函数内部声明的就是局部变量.代码实例: <script type="text/javascript"> var a; function fun() { var b; c

SQL Server 2012安装时如何不安装自带的Visual Studio

不安装以下两个: 参考文章 1. DBA_Huangzj, QL Server 2012安装时如何不安装自带的Visual Studio.

python 类带括号和不带括号的区别

Python创建类的时候,加()和不加有什么区别.联系? Python中函数带括号和不带括号的区别 原文地址:https://www.cnblogs.com/ppybear/p/12348736.html

&quot;大哥,割草机借我用一下,我修整一下草坪。&quot; ---- 谈谈this与JavaScript函数调用的不解之缘

在写上一篇有关apply和call的博文时(闲聊JS中的apply和call),起初我还是担心大家理解起来比较困难,因为要理解apply调用方式的前提是,至少先理解在JavaScript中函数是什么?this到底代表什么意思?等等.不过从大家的反馈来看,我的担心是多余的,诸位园友都是高手,理解这些基础的东东是小菜一碟.话虽这样讲,不过今天我还是和大家聊聊JavaScript中与this相关的各种函数调用方式,可以把知识补充完整,日后回顾起来也比较方便. [背景介绍]光明小区是一个别墅小区,家家户

python带参数和不带参数装饰器

http://blog.csdn.net/pipisorry/article/details/41902599 对于无参数的装饰器,其装饰器函数的参数是要被装饰的函数对象名: 对于有参数的装饰器在调用时使用的是应用的参数,@timeStumpFunc_args(argv)的argv,已不再是要被装饰的函数对象名,所以必须在内部再定义一个函数getfunc()来接收要被装饰的函数对象. #!/usr/bin/env python # coding=gbk """ __title

【其他】UTF-8带签名与不带签名

在 Visual Web Developer 另存为文件时,有编码选项,其中有: Unicode (UTF-8 with signature) - Codepage 65001 Unicode (UTF-8 without signature) - Codepage 65001 这两个都是 UTF-8,一个带签名,一个不带签名,有什么区别呢? 带签名也就是带 BOM 信息,不带签名就是不带 BOM. 如果这个网页是用来被别人包含的,如 ASP 中的 include,那么这个网页就不要带签名,否则

5个KO实例带你装B带你飞

Knockoutjs 以下简称 ko, 是一个 javascript 的 MVVM 框架. 在 MVC 4 的项目模板中, 默认会引用 knockoutjs, 我正式接触它也不过4个月的时间. 在没有使用它之前, 要做一个主从关系的维护, 大概要写一堆 CloneNode / Append, js 水平一般的同学, 要写这样一个业务页面, 大概要写几百几千行 js 才行. 本示例不是介绍 ko 的用法, 而是 以 我在项目中 处理过的 稍有些复杂的 业务 为原型, 做深入一步的理解如何用KO带你